現在與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