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

Облегченная структура публикации/подписки в java

Есть ли хорошая облегченная структура для java, которая предоставляет шаблон публикации/подписки?

Некоторые идеальные функции

  • Поддержка дженериков
  • Регистрация нескольких подписчиков издателю
  • API в первую очередь интерфейсы и некоторые полезные реализации
  • чисто в памяти, настойчивость и гарантии транзакций не требуются.

Я знаю о JMS, но это слишком сложно для моей потребности. Опубликованные/подписанные данные являются результатом сканирования файловой системы, при этом результаты сканирования подаются на другой компонент для обработки, которые затем обрабатываются перед подачей на другой и так далее.

EDIT: Все в рамках одного процесса. Свойство PropertyChangeListener из beans не совсем сокращает его, поскольку оно сообщает об изменениях свойств, а не публикует определенные элементы. Я мог бы обучать ProprtyChangeListener работать, имея свойство "последний опубликованный объект" и так опубликованные объекты. PropertyChangeListeners не поддерживают дженерики и укоренены в семантике изменения свойств, а не в чистой публикации/подписке. Шаблон Observer/Observable java.util был бы хорош, но Oberver - это конкретный класс.

4b9b3361

Ответ 1

JMS такой же легкий или тяжелый, как вы его настраиваете. Мы используем, например, HornetQ в одном проекте с очередью в памяти. Он прост в настройке, не требует какой-либо JNDI-конфигурации и действительно прост в использовании.

Я считаю, что JMS как API для Message Pub/Sub так же просто, как и получается. (И не проще;)

Ответ 2

Кажется, это соответствует требованиям:

EventBus из Google Guava Library - "Публикация-стиль подписки между компонентами, не требуя, чтобы компоненты явно регистрировались друг с другом", Он также может быть AsyncEventBus, который будет отправлять события в другой поток.

Некоторые дополнительные опции для рассмотрения:

  • Если в этом процессе возможно использование шаблона Observer. Подписчики могут добавлять слушателей и получать уведомления о событиях. Observable уже является частью Java API.

  • FFMQ - полная реализация Java, облегченная реализация Fast JMS 1.1 Queue.

Ответ 3

Поскольку вы используете Spring, я не знаю, знаете ли вы, что Spring имеет свою собственную облегченную среду событий. Он используется в основном внутри самой структуры, но отлично подходит для кода приложения.

По умолчанию это синхронный pub/sub, но вы можете сделать его асинхронным с помощью ApplicationEventMulticaster.

Ответ 4

Я думаю, что Camel также является хорошим кандидатом. Особенно с публикацией-подписью шаблона

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

Он сравнивается с Spring Интеграция, но более полная ИМО.

Ответ 5

Если вы пересекаете границы процесса, тогда возникает некоторая степень "веса". Почему вы говорите, что JMS - тяжеловес? API довольно прост? Есть, предположительно, легкие реализации, например текст ссылки Более тяжелые затраты, такие как постоянство и транзакционная способность, являются необязательными.

Что вам нужно, это легче, чем это?

Ответ 6

Боб Ли имеет класс QueueFile в http://snipt.org/GWm/, который может показаться вам интересным. Это простая постоянная очередь и может использоваться несколькими потребителями. Похоже, вам не нужна настойчивость, но поскольку все это так легко, все равно может быть полезно.