【发布时间】:2018-08-22 22:18:07
【问题描述】:
我正在尝试在 JBoss EAP 6.4 实例之间建立集群。这些实例包括 Hornetq 配置。所以我使用的是standalone-full-ha 配置。
我正在使用以下命令启动实例
standalone.bat -c Standalone-full-ha.xml -b ip1 -u 230.0.0.4 -Djboss.node.name=node1
standalone.sh -b ip2 -c Standalone-full-ha.xml -u 230.0.0.4 -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=100
当我启动服务器时(不管哪个先启动),第二个节点在重启后会抛出 Hornetq 异常。第二个节点安装在 Linux 系统上。如果我不使用 Windows 操作系统启动节点,则第二个节点不会引发任何异常。我已经阅读了一些教程,但我没有得到原因。
这是消息系统的配置。
<subsystem xmlns="urn:jboss:domain:messaging:1.4">
<hornetq-server>
<persistence-enabled>true</persistence-enabled>
<security-enabled>false</security-enabled>
<clustered>true</clustered>
<cluster-password>${jboss.messaging.cluster.password:CHANGE ME!!}</cluster-password>
<journal-type>NIO</journal-type>
<journal-min-files>2</journal-min-files>
<connectors>
<netty-connector name="netty" socket-binding="messaging"/>
<netty-connector name="netty-throughput" socket-binding="messaging-throughput">
<param key="batch-delay" value="50"/>
</netty-connector>
<in-vm-connector name="in-vm" server-id="0"/>
</connectors>
<acceptors>
<netty-acceptor name="netty" socket-binding="messaging"/>
<netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
<param key="batch-delay" value="50"/>
<param key="direct-deliver" value="false"/>
</netty-acceptor>
<in-vm-acceptor name="in-vm" server-id="0"/>
</acceptors>
<broadcast-groups>
<broadcast-group name="bg-group1">
<socket-binding>messaging-group</socket-binding>
<broadcast-period>5000</broadcast-period>
<connector-ref>netty</connector-ref>
</broadcast-group>
</broadcast-groups>
<discovery-groups>
<discovery-group name="dg-group1">
<socket-binding>messaging-group</socket-binding>
<refresh-timeout>10000</refresh-timeout>
</discovery-group>
</discovery-groups>
<cluster-connections>
<cluster-connection name="my-cluster">
<address>jms</address>
<connector-ref>netty</connector-ref>
<discovery-group-ref discovery-group-name="dg-group1"/>
</cluster-connection>
</cluster-connections>
<security-settings>
<security-setting match="#">
<permission type="send" roles="guest"/>
<permission type="consume" roles="guest"/>
<permission type="createNonDurableQueue" roles="guest"/>
<permission type="deleteNonDurableQueue" roles="guest"/>
</security-setting>
</security-settings>
<address-settings>
<address-setting match="#">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<max-size-bytes>10485760</max-size-bytes>
<page-size-bytes>2097152</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<redistribution-delay>1000</redistribution-delay>
</address-setting>
</address-settings>
<jms-connection-factories>
<connection-factory name="InVmConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/ConnectionFactory"/>
</entries>
</connection-factory>
<connection-factory name="RemoteConnectionFactory">
<connectors>
<connector-ref connector-name="netty"/>
</connectors>
<entries>
<entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
</entries>
<ha>true</ha>
<block-on-acknowledge>true</block-on-acknowledge>
<retry-interval>1000</retry-interval>
<retry-interval-multiplier>1.0</retry-interval-multiplier>
<reconnect-attempts>-1</reconnect-attempts>
</connection-factory>
<pooled-connection-factory name="hornetq-ra">
<transaction mode="xa"/>
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/JmsXA"/>
</entries>
</pooled-connection-factory>
</jms-connection-factories>
<jms-destinations>
<jms-queue name="ExpiryQueue">
<entry name="java:/jms/queue/ExpiryQueue"/>
</jms-queue>
<jms-queue name="DLQ">
<entry name="java:/jms/queue/DLQ"/>
</jms-queue>
<jms-queue name="SiGuardServerQueue">
<entry name="java:jboss/exported/queue/siguard/serverQueue"/>
</jms-queue>
<jms-topic name="SiGuardClientTopic">
<entry name="java:jboss/exported/topic/siguard/clientTopic"/>
</jms-topic>
<jms-topic name="SiGuardNodeTopic">
<entry name="java:jboss/exported/topic/siguard/nodeTopic"/>
</jms-topic>
</jms-destinations>
</hornetq-server>
</subsystem>
这是关于集群的日志消息。
12:41:01,656 INFO [org.hornetq.core.server] (Thread-26 (HornetQ-server-HornetQServerImpl::serverUUID=da26d613-275d-11e8-9916-47aa4871a389-1826611860)) HQ221027: Bridge ClusterConnectionBridge@3c035549 [name=sf.my-cluster.4f838502-2756-11e8-a545-6f0f06e5030f, queue=QueueImpl[name=sf.my-cluster.4f838502-2756-11e8-a545-6f0f06e5030f, postOffice=PostOfficeImpl [server=HornetQServerImpl::serverUUID=da26d613-275d-11e8-9916-47aa4871a389]]@26a4798f targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@3c035549 [name=sf.my-cluster.4f838502-2756-11e8-a545-6f0f06e5030f, queue=QueueImpl[name=sf.my-cluster.4f838502-2756-11e8-a545-6f0f06e5030f, postOffice=PostOfficeImpl [server=HornetQServerImpl::serverUUID=da26d613-275d-11e8-9916-47aa4871a389]]@26a4798f targetConnector=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5545&host=158-226-195-192], discoveryGroupConfiguration=null]]::ClusterConnectionImpl@1921711354[nodeUUID=da26d613-275d-11e8-9916-47aa4871a389, connector=TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=158-226-195-193, address=jms, server=HornetQServerImpl::serverUUID=da26d613-275d-11e8-9916-47aa4871a389])) [initialConnectors=[TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5545&host=158-226-195-192], discoveryGroupConfiguration=null]] is connected
这是在第二个节点中抛出的异常。
2:18:59,991 ERROR [org.hornetq.core.client] (Thread-8 (HornetQ-server-HornetQServerImpl::serverUUID=4f838502-2756-11e8-a545-6f0f06e5030f-1656714538)) HQ214016: Failed to create netty connection: java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.8.0_111]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) [rt.jar:1.8.0_111]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) [rt.jar:1.8.0_111]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) [rt.jar:1.8.0_111]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) [rt.jar:1.8.0_111]
at java.net.Socket.connect(Socket.java:589) [rt.jar:1.8.0_111]
at org.jboss.netty.channel.socket.oio.OioClientSocketPipelineSink.connect(OioClientSocketPipelineSink.java:109) [netty-3.6.10.Final-redhat-1.jar:3.6.10.Final-redhat-1]
at org.jboss.netty.channel.socket.oio.OioClientSocketPipelineSink.eventSunk(OioClientSocketPipelineSink.java:69) [netty-3.6.10.Final-redhat-1.jar:3.6.10.Final-redhat-1]
at org.jboss.netty.channel.Channels.connect(Channels.java:634) [netty-3.6.10.Final-redhat-1.jar:3.6.10.Final-redhat-1]
at org.jboss.netty.channel.AbstractChannel.connect(AbstractChannel.java:207) [netty-3.6.10.Final-redhat-1.jar:3.6.10.Final-redhat-1]
at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:229) [netty-3.6.10.Final-redhat-1.jar:3.6.10.Final-redhat-1]
at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:182) [netty-3.6.10.Final-redhat-1.jar:3.6.10.Final-redhat-1]
at org.hornetq.core.remoting.impl.netty.NettyConnector.createConnection(NettyConnector.java:653) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnection(ClientSessionFactoryImpl.java:1257) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnectionWithRetry(ClientSessionFactoryImpl.java:1103) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.core.client.impl.ClientSessionFactoryImpl.connect(ClientSessionFactoryImpl.java:253) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:882) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.core.client.impl.ServerLocatorImpl.connect(ServerLocatorImpl.java:670) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.core.client.impl.ServerLocatorImpl.connect(ServerLocatorImpl.java:654) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.core.client.impl.ServerLocatorImpl$3.run(ServerLocatorImpl.java:632) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:105) [hornetq-core-client-2.3.25.Final-redhat-1.jar:2.3.25.Final-redhat-1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_111]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_111]
【问题讨论】:
-
- 在这种特殊情况下,问题是由网络配置错误引起的。集群节点之间有防火墙阻止集群形成。系统无法跟上执行者创建速度的事实。一旦创建了一个,它就被 netty 尝试建立连接用完了,活动不断失败。确定远程 HornetQ 实例是否可访问。
-
- 检查消息传递子系统以确定正在使用的网络连接器和套接字绑定。 ~~
${jboss.messaging.cluster.password:CHANGE ME!!} trueNIO 2 ... ~~
标签: java jakarta-ee cluster-computing hornetq jboss-eap-6