Механизм распределенной обработки событий для Java

Я ищу достаточно быстрый механизм обработки событий в Java для генерации и обработки событий на разных JVM, работающих на разных хостах.

Для обработки событий в нескольких потоках в одной JVM я нашел несколько хороших кандидатов, таких как Jetlang. Но в поисках распределенного эквивалента я не смог найти ничего достаточно легковесного, чтобы обеспечить хорошую производительность.

Кто-нибудь знает какие-либо реализации, которые отвечают всем требованиям?

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

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


person trshiv    schedule 08.10.2008    source источник
comment
Немного больше деталей не помешало бы; например, он будет распространяться по локальной сети или удаленно? Клиент-сервер или одноранговая сеть?   -  person Viruzzo    schedule 11.01.2012


Ответы (10)


Hazelcast Topic – это решение для распределенного обмена сообщениями между публикациями и подписками.

public class Sample implements MessageListener {

    public static void main(String[] args) { 
        Sample sample = new Sample();
        Topic topic = Hazelcast.getTopic ("default");  
        topic.addMessageListener(sample);       
        topic.publish ("my-message-object");
    }  
     
    public void onMessage(Object msg) {
        System.out.println("Message received = " + msg);
    } 
}

Hazelcast также поддерживает события в распределенной очереди, карте, наборе, списке. Все события тоже упорядочены.

С уважением,

-талип

http://www.hazelcast.com

person Community    schedule 29.10.2008

В зависимости от вашего варианта использования Terracotta может быть отличным выбором.

person Alex Miller    schedule 08.10.2008

AMQP (Advanced Message Queuing Protocol) — более подробная информация: http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, вероятно, то, что вы ищете.

Он используется компаниями, предоставляющими финансовые услуги, в связи с их высокими требованиями к производительности — у apache есть готовая реализация — http://cwiki.apache.org/qpid/

OpenAMQ — http://www.openamq.org/ — старая ЭТАЛОННАЯ РЕАЛИЗАЦИЯ.

person anjanb    schedule 08.10.2008

Для распределенной обработки событий вы можете использовать Esper. Он может обрабатывать до 500 000 событий/с на двух процессорах. Аппаратное обеспечение на базе Intel с частотой 2 ГГц. Оно очень стабильно, потому что многие банки используют это решение. Он поддерживает адаптер ввода и вывода JMS на основе шаблонов Spring JMS. Таким образом, вы можете использовать любую реализацию JMS для обработки событий, например ActiveMQ.

person Pavel Rodionov    schedule 29.10.2008

ZeroMQ — http://www.zeromq.org/

Хотя это транспортный уровень, его можно настроить для обработки событий.

person Synthesis    schedule 28.12.2011

Какой бы инструмент вы ни использовали, я бы рекомендовал скрыть API-интерфейсы промежуточного программного обеспечения от логики вашего приложения. Например, если вы использовали подход Apache Camel для сокрытия промежуточного ПО, вы могли легко переключитесь с AMQP на SEDA, на JMS, на ActiveMQ, на JavaSpaces, на свой собственный транспорт MINA, основанный на ваших конкретных требованиях.

Если вы хотите использовать брокер сообщений, я бы рекомендовал использовать Apache ActiveMQ, который является самым популярным и мощным открытым брокер исходных сообщений, за которым стоит крупнейшее и наиболее активное сообщество как внутри Apache, так и вне его.

person James Strachan    schedule 08.10.2008

Взгляните на акка (http://akka.io/). Он предлагает модель распределенного актора в том же духе, что и erlang для JVM с API-интерфейсами java и scala.

person Tom    schedule 11.01.2012

Вам необходимо реализовать шаблон Observer Design для распределенной обработки событий в java. Я использую потоковую передачу событий, используя ограниченную коллекцию MongoDB и наблюдатели для достижения этой цели.

Вы можете создать архитектуру, в которой вы инициируете публикацию документа в закрытой коллекции, а ваш поток наблюдателя ожидает его с помощью хвостового курсора. Если вы не поняли, что я сказал выше, вам нужно освежить свои MongoDB и навыки Java

person Tushar    schedule 27.09.2016

Если вам не подходит реализация JMS, вас может заинтересовать XMPP. Существует несколько реализаций, а также есть публикация-подписка расширение.

person jamesh    schedule 13.10.2008

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

Avis также используется для чата, виртуального присутствия и автоматизации интеллектуальных помещений, где обычно 10-20 компьютеров обмениваются данными через шину обмена сообщениями на основе Avis. Его коммерческий двоюродный брат (Mantara Elvin) используется для обработки больших объемов коммерческих торговых событий.

person Matthew Phillips    schedule 15.07.2009