Упрощенный обмен сообщениями (асинхронные вызовы) в Java

StackOverflow https://stackoverflow.com/questions/211480

  •  03-07-2019
  •  | 
  •  

Вопрос

Я ищу облегченную платформу обмена сообщениями на Java.Моя задача - обрабатывать события в манере СЕДА:Я знаю, что некоторые этапы обработки могут быть завершены быстро, а другие нет, и хотел бы разделить эти этапы обработки.

Допустим, у меня есть компоненты A и B, и механизм обработки (будь то этот контейнер или что-то еще) вызывает компонент A, который, в свою очередь, вызывает компонент B.Меня не волнует, будет ли время выполнения компонента B составлять 2 секунды, но меня волнует, будет ли время выполнения компонента A, например, ниже 50 мс.Следовательно, представляется наиболее разумным, чтобы компонент A отправил сообщение B, которое B обработает в нужное время.

Я знаю о различных реализациях JMS и Apache ActiveMQ:они слишком тяжеловесы для этого.Я искал какой-нибудь легкий способ обмена сообщениями (с действительно базовыми функциями, такими как сериализация сообщений и простейшая маршрутизация), но безрезультатно.

Можете ли вы что-нибудь порекомендовать в этом выпуске?

Это было полезно?

Решение

Нужна ли вам какая-либо настойчивость (напримересли ваша JVM умирает в промежутке между обработкой тысяч сообщений) и нужны ли вам сообщения для перехода на какие-либо другие JVM?

Если это все в одной JVM, и вам не нужно беспокоиться о транзакциях, восстановлении или потере сообщений в случае смерти JVM - тогда, как сказал Крис выше, исполнители в порядке.

ActiveMQ довольно легкий;вы можете использовать его только в одной JVM без сохранения, если хотите;затем вы можете включить транзакции / сохранение / восстановление / удаленное взаимодействие (работу с несколькими JVM) по мере необходимости.Но если вам не нужно ничего из этого, то это излишество - просто используйте Executors.

Кстати, другим вариантом, если вы не уверены, какие шаги могут потребовать сохранения / надежности или балансировки нагрузки для нескольких JVM, было бы полностью скройте использование промежуточного программного обеспечения таким образом, вы можете переключаться между очередями SEDA в памяти с исполнителями на JMS / ActiveMQ по мере необходимости.

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

Другие советы

В самом деле легкий? Исполнители.:-) Итак, вы настраиваете исполнителя (B, в вашем описании), а A просто отправляет задачи исполнителю.

Я думаю, что Apache Camel удовлетворит все ваши потребности.Он работает в JVM и поддерживает стиль SEDA (http://camel.apache.org/seda.html) и простая маршрутизация.Может использоваться как самостоятельно, так и с spring, поставщиком JMS или другими адаптерами.

Извините, что воскрешаю старую тему, но, возможно, это поможет кому-то еще прочитать ее...Я думаю , что FFMQ является хорошим кандидатом для облегченной платформы обмена сообщениями.

Обновить:однако я не уверен, поддерживает ли он задержки повторной доставки (проблема с очередью мертвых писем).Я бы счел это полезным даже для легковесных провайдеров.Но я предполагаю, что это могло бы быть возможно с помощью комбинации запроса MessageSelector и свойств сообщения.

Для получения помощи кому-нибудь еще прочтите эту тему:
Одной из самых легких платформ обмена сообщениями является Мбасседер.MBassador - это очень легкая реализация шины сообщений (событий), следующая шаблону публикации подписки.Он разработан для простоты использования и призван быть многофункциональным и расширяемым при сохранении эффективности использования ресурсов и производительности.
Основой высокой производительности MBassador является специализированная структура данных, которая сводит к минимуму конфликт блокировок, так что снижение производительности при параллельном доступе минимально.
Характеристики:Декларативное определение прослушивателя с помощью аннотаций, синхронизация и / или асинхронная доставка событий, слабые ссылки, фильтрация сообщений

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top