Уже почти 4 года я работаю с HornetQ и думаю, что пришло время поделиться частью того, что я узнал до сих пор.
Основная цель этого поста не в том, чтобы переписать официальную документацию , а в том, чтобы прояснить, простыми способами, концепции, которые мы чаще всего используем здесь в PaddyPower.
Что такое HornetQ
HornetQ — это реализация JMS. JMS — это промежуточное API, ориентированное на сообщения, для асинхронного обмена информацией между производителями и потребителями.
HornetQ является одним из многочисленных фреймворков, которые реализуют JMS API.
конфигурация
Все настройки HornetQ, которые нас интересуют, находятся в 1 папке. Как красиво это ?! Папка hornetq (или hornetq.sar в зависимости от используемой версии jboss), и вы можете найти ее в папке развертывания вашего профиля jboss.
В этой папке у нас есть до 7 XML-файлов конфигурации. Мы действительно заботимся только о 2:
- hornetq-jms.xml и hornetq-configuration.xml .
- hornetq-jms.xml
Здесь вы хотите определить свои имена JNDI для очередей, тем и фабрик соединений.
По умолчанию все фабрики соединений, мертвая буква и очередь истечения уже настроены.
То, что вам нужно добавить, это только очереди или темы, которые должны использовать ваше приложение.
Например:
1
2
3
|
< queue name = 'phaseQueueFromEngine' > < entry name = '/queue/phaseQueueFromEngine' /> </ queue > |
имя записи — это имя JNDI, используемое вашим производителем и потребителем для обнаружения очереди.
hornetq-configuration.xml
Здесь вы хотите определить акцепторы, разъемы, мосты и другие интересные вещи.
Понимание разъемов и акцепторов
Хорошо, это может быть сложно, поэтому я постараюсь быть простым и необходимым.
HornetQ запускается на сервере (например, JBoss) или как отдельное приложение.
В любом из вышеперечисленных случаев HornetQ работает, связываясь со своим собственным сервером, сервером HornetQ.
Чтобы общаться с ним, мы должны сказать, как мы подключаемся и что мы принимаем в качестве подключения.
- Акцепторы определяют, какой тип соединения принимается сервером HornetQ.
- Разъемы определяют, как подключаться к серверу HornetQ.
К счастью, возможны только 2 вида разъемов и акцепторов, in-vm и netty. in-vm используется, когда производитель и потребитель живут в одной виртуальной машине.
Пример:
1
2
3
4
5
6
|
< acceptor name = 'in-vm' > < factory-class >org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory</ factory-class > </ acceptor > < connector name = 'in-vm' > < factory-class >org.hornetq.core.remoting.impl.invm.InVMConnectorFactory</ factory-class > </ connector > |
netty используется, когда производитель и потребитель живут в разных виртуальных машинах.
Пример:
Производитель / Потребитель в одной машине:
1
2
3
4
5
|
< acceptor name = 'netty' > < factory-class >org.hornetq.integration.transports.netty.NettyAcceptorFactory</ factory-class > < param key = 'host' value = '${host:localhost}' /> < param key = 'port' value = '${port:5445}' /> </ acceptor > |
1
2
3
4
5
|
< connector name=”netty”> < factory-class >org.hornetq.integration.transports.netty.NettyConnectorFactory</ factory-class > < param key=”host” value=”${host:localhost}”/> < param key=”port” value=”${port:5445}”/> </ connector > |
Производитель / Потребитель на разных машинах:
Потребительская коробка
1
2
3
4
5
|
< acceptor name=”netty-external-acceptor”> < factory-class >org.hornetq.integration.transports.netty.NettyAcceptorFactory</ factory-class > < param key=”host” value=”172.x.x.62″/> < param key=”port” value=”5445″/> </ acceptor > |
Коробка производителя
1
2
3
4
5
|
< connector name = 'remote-engine-connector' > < factory-class > org.hornetq.integration.transports.netty.NettyConnectorFactory</ factory-class > < param key = 'host' value = '172.x.x.62' /> < param key = 'port' value = '5445' /> </ connector > |
Все идет нормально.
Обратите внимание при настройке акцепторов и соединителей, потому что для правильной связи они должны быть одного типа с одним и тем же хостом и портом.
Netty акцептор с разъемом Netty (тот же хост и порт)
ХОРОШИЙ
Приемник In-VM с разъемом In-VM
ХОРОШИЙ
акцептор in-vm с разъемом netty
ПЛОХОЙ
порт приема нетто 5445 с разъемом нетто 5446
ПЛОХОЙ
принимающий узел netty 172.xx60 с разъемом netty 172.xx62
ПЛОХОЙ
Понимание мостов
Другая особенность, которую я широко использовал, — это мост.
Если у вас есть производитель, живущий в коробке 172.xx60, и потребитель, сидящий в коробке 172.xx62, вам нужно их подключить, и вы делаете это, настраивая мост в нашем любимом файле конфигурации hornetq-configuration.xml
Пример :
1
2
3
4
5
6
|
< bridge name=”from60to62Bridge”> < queue-name >jms.queue.phaseQueueToEngine</ queue-name > < forwarding-address >jms.queue.phaseQueueFromInput</ forwarding-address > < reconnect-attempts >-1</ reconnect-attempts > < connector-ref connector-name=”remote-engine-connector”/> </ bridge > |
Да, вы используете соединитель, чтобы указать, где подключиться к другому серверу hornetQ. Легко!
Я надеюсь, что это прояснит пару аспектов и поможет лучше понять иногда пугающую конфигурацию Hornetq.
Скоро .. HornetQ для детей, родителей, бабушек и дедушек — Глава 2: магия настройки адресов
Ссылка: JBoss HornetQ для детей, родителей, бабушек и дедушек — глава 1 от нашего партнера по JCG Марко Кастильего из блога « Удалить дубликаты и исправление дурных имен» .