Самый простой способ - использовать rx java в качестве поставщика потоков. Для начала нужно добавить зависимость rx java. Он может go либо из реактивных зависимостей в quarkus, таких как kafka, либо напрямую (если вам не нужны потоковые библиотеки):
<dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>2.2.19</version>
</dependency>
Вот пример того, как отправить случайное двойное значение каждую секунду:
@GET
@Path("/stream")
@Produces(MediaType.SERVER_SENT_EVENTS)
@SseElementType("text/plain")
public Publisher<Double> stream() {
return Flowable.interval(1, TimeUnit.SECONDS).map(tick -> new Random().nextDouble());
}
Мы создаем новый Flowable, который будет срабатывать каждую секунду, и на каждом тике мы генерируем следующий случайный дубль. Изучите любые другие варианты того, как вы можете создать Flowable, например Flowable.fromFuture()
, чтобы адаптировать его для вашего указанного c кода logi c.
PS-код выше будет генерировать новый Flowable каждый раз, когда вы запрашиваете эту конечную точку, Я сделал это для экономии места, в вашем случае я предполагаю, что у вас будет один источник событий, который вы можете создать один раз и использовать один и тот же экземпляр каждый раз, когда конечная точка запрашивает