现在与HornetQ合作已经快4年了,我认为是时候分享我到目前为止所学知识的一部分了。
这篇文章的主要目的不是重写官方文档 ,而是以简单的方式阐明我们在PaddyPower中最常用的概念。
什么是HornetQ
HornetQ是JMS实现。 JMS是一种面向消息的中间件API,用于以异步方式在生产者和使用者之间交换信息。
HornetQ是实现JMS API的众多框架之一。
组态
我们关心的所有HornetQ配置都在1个文件夹中。 那有多美? 该文件夹为hornetq(或在您使用的jboss版本上浸入hornetq.sar) ,您可以在jboss配置文件的部署文件夹中找到它。
在此文件夹中,我们最多有7个xml配置文件。 我们真的只关心2:
- hornetq-jms.xml和hornetq-configuration.xml 。
- hornetq-jms.xml
在这里,您要为队列,主题和连接工厂定义JNDI名称。
默认情况下,所有Connection工厂,无效字母和到期队列都已配置。
您需要添加的只是您的应用程序需要使用的队列或主题。
例如:
<queue name='phaseQueueFromEngine'><entry name='/queue/phaseQueueFromEngine'/>
</queue>
条目名称是生产者和使用者用来发现队列的JNDI名称。
hornetq-configuration.xml
在这里您要定义接收器,连接器,桥和其他很酷的东西。
了解连接器和接受器
好的,这可能很棘手,所以我将尝试变得简单而必要。
HornetQ在服务器(例如JBoss)中运行或作为独立应用程序运行。
在以上任何一种情况下,HornetQ均通过与自己的服务器HornetQ服务器进行通信来工作。
为了与之通信,我们必须告诉我们如何连接以及我们接受的连接。
- 接受者定义HornetQ Server接受哪种连接类型。
- 连接器定义了如何连接到HornetQ服务器。
幸运的是,in-vm和netty仅支持2种连接器和接受器。 当生产者和使用者位于同一虚拟机中时,将使用in-vm 。
例:
<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 。
例:
同一台机器上的生产者/消费者:
<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>
<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>
不同机器上的生产者/消费者:
消费盒
<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>
生产箱
<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接受器
好
带Netty连接器的in-vm接受器
坏
带Netty连接器5446的Netty接受器端口5445
坏
带有网络连接器172.xx62的网络接受器主机172.xx60
坏
了解桥梁
我广泛使用的另一个功能是桥接。
如果您有一个生产者生活在172.xx60框内,而一个消费者则生活在172.xx62框内,则需要连接它们,并在我们钟爱的配置文件hornetq-configuration.xml中配置网桥。
范例:
<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 for Kids,父母和祖父母–来自我们的JCG合作伙伴 Marco Castigliego的第一章 ,位于“ 删除重复并修复不良名称”博客上。
翻译自: https://www.javacodegeeks.com/2012/11/jboss-hornetq-for-kids-parents-and-grandparents-chapter-1.html