Нашел в черновиках
http://activemq.apache.org
Быстродействие (Intel Celeron M380):
20 000 сообщений в секунду для Topic
5 000 сообщений в секунду для Queues
Сетевое взаимодействие
Протоколы
* xmpp (Jabber) – позволяет получать и отправлять сообщения использую jabber клиент, не поддерживает пользователей [http://activemq.apache.org/xmpp.html]
* OpenWire – кросплатформенный протокол сообщений (основной) [http://activemq.apache.org/openwire.html]
* Stomp – кросплатформенный протокол сообщений (Ruby, Perl, Python, PHP) [http://activemq.apache.org/stomp.html]
* REST – отправка сообщений с помощью GET/POST [http://activemq.apache.org/rest.html]
* RSS – получение сообщений [http://activemq.apache.org/rss-and-atom.html]
Транспорты
* VM – работа внутри одной виртуальной машины;
* TCP
* UDP
* HTTP(S)
Обработчики сообщений
Асинхронная обработка
((ActiveMQConnectionFactory)connectionFactory).setDispatchAsync(false);
...
((ActiveMQConnection)connection).setDispatchAsync(false);
...
queue = new ActiveMQQueue("TEST.QUEUE?consumer.dispatchAsync=false");
consumer = session.createConsumer(queue);
Приоритет обработчика
[http://activemq.apache.org/consumer-priority.html]
queue = new ActiveMQQueue("TEST.QUEUE?consumer.priority=10");
consumer = session.createConsumer(queue);
Эксклюзивная обработка
Подразумевает передачу всех сообщений текущему обработчику
queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true");
consumer = session.createConsumer(queue);
Обработка устаревших сообщений
[http://activemq.apache.org/retroactive-consumer.html]
queue = new ActiveMQQueue("TEST.QUEUE?consumer.retroactive=true");
consumer = session.createConsumer(queue);
Селекторы (JMS стандарт)
Выбор сообщения для прослушивания используя фильтр
queue = new ActiveMQQueue("TEST.QUEUE?consumer.selector=");
consumer = session.createConsumer(queue);
JMSType = 'car' AND color = 'blue' AND weight > 2500
XPATH '//title[@lang=''eng'']'
Ссылка на очередь
Множественная ссылка
[http://activemq.apache.org/composite-destinations.html]
Queue queue = new ActiveMQQueue("FOO.A,FOO.B,FOO.C");
producer.send(queue, someMessage);
Queue queue = new ActiveMQQueue("FOO.A,topic://NOTIFY.FOO.A");
producer.send(queue, someMessage);
Шаблоны в именах очередей
Применяются для работы с деревом очередей (на самом деле как дерева нет – есть имя разделенное на элементы в виде точек)
|PRICE.> |Any price for any product on any exchange |
|PRICE.STOCK.> |Any price for a stock on any exchange |
|PRICE.STOCK.NASDAQ.* |Any stock price on NASDAQ |
|PRICE.STOCK.*.IBM |Any IBM stock price on any exchange |
Отправка сообщений
Асинхронная отправка
cf = new ActiveMQConnectionFactory("tcp://locahost:61616?jms.useAsyncSend=true");
((ActiveMQConnectionFactory)connectionFactory).setUseAsyncSend(true);
((ActiveMQConnection)connection).setUseAsyncSend(true);