Уже почти 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 Марко Кастильего из блога « Удалить дубликаты и исправление дурных имен» .