ActiveMQ – шпаргалка

Нашел в черновиках 🙂

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);