Статьи

JBoss HornetQ для детей, родителей, бабушек и дедушек — Глава 1

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