2008-10-17 2 views
9

Я ищу легкую среду обмена сообщениями в Java. Моя задача - обрабатывать события в манере SEDA: я знаю, что некоторые этапы обработки могут быть быстро завершены, а другие нет, и они хотели бы отделить эти этапы обработки.Легкий обмен сообщениями (async invocations) в Java

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

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

У вас есть что рекомендовать в этом выпуске?

ответ

4

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

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

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

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

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

4

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

2

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

1

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

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

0

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

Смежные вопросы