Подтвердить что ты не робот

Когда использовать автобус событий?

Я разрабатываю бэкэнд для нового веб-приложения Java и пытаюсь решить, следует ли использовать Event Bus; в частности Guava EventBus.

Большинство запросов на стороне сервера будут синхронными: то есть пользователь запрашивает данные и требует ответа в течение нескольких секунд. Тем не менее, существует также довольно много запросов, которые могут быть асинхронными и "пожарными и забытыми" на стороне клиента. До тех пор, пока они в конечном итоге будут обработаны, клиент может заботиться о нем меньше, если он занимает 2 секунды для обработки или 2 часа.

Для этих асинхронных запросов я планирую, что сервлет, прослушивающий на сопоставленном URL, публикует запросы в очередь. Затем потребитель отбрасывает каждый запрос и направляет его соответствующему обработчику. Здесь EventBus может или не может вступить в игру. Бизнес-логика для маршрутизации запроса правильному обработчику довольно сложна. Обычно маршрут верблюда был бы идеальным решением. В моем случае я задаюсь вопросом, могу ли я просто подключить кучу "процессоров" (обработчиков событий) к одной и той же шине событий, а затем каждый из них запускает и принимает события друг с другом, пока не будет достигнут конечный результат производится.

Я хотел бы сказать, что я уже изучал использование Apache Camel и что я верю, что Camel - правильный инструмент для работы здесь. К сожалению, по причинам, выходящим за рамки этого вопроса, я не буду использовать его. Поэтому я начал выдумывать решения, подобные Camel, а именно то, как я прибыл в Guava EventBus. Но это может быть не подходящая замена.

Я думаю, что я ищу классификацию проблем, которую решает шаблон Event Bus, а затем мне нужно определить, соответствует ли это моему прецеденту.

4b9b3361

Ответ 1

Вот оператор проблемы, который EventBus решает в двух словах:

"Я хочу простой, централизованный способ уведомления кода, который интересуется определенными типами событий, когда эти события происходят без какой-либо прямой связи между кодом, который публикует событие и код, который его получает".

Когда вы говорите: "бизнес-логика для маршрутизации запроса правильному обработчику довольно сложна", я подозреваю, что EventBus может и не быть тем, что вы ищете, поскольку он маршрутизируется только на основе класса объектов Java вы можете сделать некоторые причудливые вещи с внедрением интерфейсов в ваших классах событий и подпиской подписчиков на определенные интерфейсы).