Правильный способ начать рабочий поток с Quarkus? - PullRequest
2 голосов
/ 19 марта 2020

Я внедряю сервер Quarkus. При запуске сервера должен быть запущен (бесконечный) фоновый процесс.

Я знаю, что могу наблюдать событие запуска с бином @ApplicationScoped, который реализует: void onStart(@Observes StartupEvent ev).

Но что лучший способ начать фоновый процесс? Есть ли ограничения? В J2EE не следует создавать потоки, а использовать ManagedExecutorService или EJB с аннотированным методом @Asynchronous.

Есть ли что-то подобное в Quarkus? Я нашел только аннотации планировщика (которые хороши, но я хочу начать процесс только один раз в начале).

Так я могу просто создавать потоки? Или просто введите мой бесконечный код в void onStart(@Observes StartupEvent ev)?

Спасибо

1 Ответ

0 голосов
/ 20 марта 2020

Как и в EJB, вы не должны делать такие вещи с фоновым процессом. Такие процессы, которые «выходят из-под контроля» структуры, в большинстве случаев вызывают очень раздражающие проблемы.

Ответ таков: это зависит от того, что вы хотите сделать на этой работе.

Если вы Если вы хотите выполнять задачи на регулярной основе, вы можете использовать таймеры.

Если вы хотите использовать его как асинхронный рабочий, вы можете использовать очередь сообщений.

И то, и другое проще всего сделать с помощью интеграция vert.x в Quarkus.

Используйте @ConsumeEvent для создания очереди, используйте

@Inject
EventBus bus;

bus.send("Example message");

для отправки сообщений.

Используйте @Scheduled работать на обычных работах, как в этом примере .

Если вам нужно постоянно слушать какой-либо сокет или файл, это становится все труднее. Может быть, websockets поможет в этом случае.

...