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

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

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

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

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

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

Ответы

Ответ 1

Hazelcast Тема - это распределенное решение для обмена сообщениями pub-sub.

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 также поддерживает события в распределенной очереди, карте, наборе, списке. Все события также упорядочены.

Привет,

-talip

http://www.hazelcast.com

Ответ 2

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

Ответ 3

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

Ответ 4

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/ - это старая ОСНОВНАЯ РЕАЛИЗАЦИЯ.

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 9

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

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

Ответ 10

Вам нужно реализовать шаблон проектирования наблюдателя для обработки распределенных событий в java. Для достижения этой цели я использую Event Streaming с использованием коллекции MongoDB и наблюдателей.

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