Jms Wildfly 9.1消息传递(群集hornetq)-域模式-主题消息(非共享订阅),MDB仅在一个节点上使用
我正在域模式下使用Wildfly 9.1 我有三位主持人:A、B和C 所有节点都有一个具有相同test.ear的测试服务器 启动三个节点后,所有Jms Wildfly 9.1消息传递(群集hornetq)-域模式-主题消息(非共享订阅),MDB仅在一个节点上使用,jms,cluster-computing,hornetq,message-driven-bean,wildfly-9,Jms,Cluster Computing,Hornetq,Message Driven Bean,Wildfly 9,我正在域模式下使用Wildfly 9.1 我有三位主持人:A、B和C 所有节点都有一个具有相同test.ear的测试服务器 启动三个节点后,所有ClusterConnectionBridge都在它们之间正确创建 每个节点在commonTopic上发送消息,MDB记录接收到的消息 问题是,我在节点A上看到的只是他自己发送的消息。在其他节点上,我看到记录了A、B、C发送的所有消息。这很奇怪,因为在节点A上使用tcpdump时,我在端口8080上看到来自其他节点的传入消息 使用cli获取节点A上的指标
ClusterConnectionBridge
都在它们之间正确创建
每个节点在commonTopic
上发送消息,MDB记录接收到的消息
问题是,我在节点A上看到的只是他自己发送的消息。在其他节点上,我看到记录了A、B、C发送的所有消息。这很奇怪,因为在节点A上使用tcpdump时,我在端口8080上看到来自其他节点的传入消息
使用cli获取节点A上的指标:
[domain@MASTER:19990 /] /host=SLAVE.A/server=test/subsystem=messaging/hornetq-server=default/jms-topic=commonTopic:read-resource(recursive=true,proxies=false,include-runtime=true,include-defaults=true)
{
"outcome" => "success",
"result" => {
"delivering-count" => 0,
"durable-message-count" => 0,
"durable-subscription-count" => 1,
"entries" => [
"java:/jms/commonTopic",
"java:jboss/exported/jms/commonTopic"
],
"message-count" => 0L,
"messages-added" => 150L,
"non-durable-message-count" => 0,
"non-durable-subscription-count" => 3,
"subscription-count" => 4,
"temporary" => false,
"topic-address" => "jms.topic.commonTopic"
}
}
我看到添加的消息数是一个节点发送的消息数的3倍。因此,消息似乎是通过网桥接收的,而不是被MDB使用
有人能告诉我在哪里可以找到这个问题吗
主机位于同一局域网上的虚拟机上
如果我在PC上启动一个节点D并将其加入群集,也会发生同样的情况。节点D记录来自其他3个节点的所有消息,但在其他节点上不记录任何消息
以下是my domain.xml中有关HornetQ配置的片段:
<subsystem xmlns="urn:jboss:domain:messaging:3.0">
<hornetq-server>
<security-enabled>false</security-enabled>
<jmx-management-enabled>true</jmx-management-enabled>
<journal-file-size>102400</journal-file-size>
<connectors>
<http-connector name="http-connector" socket-binding="http">
<param key="http-upgrade-endpoint" value="http-acceptor"/>
</http-connector>
<http-connector name="http-connector-throughput" socket-binding="http">
<param key="http-upgrade-endpoint" value="http-acceptor-throughput"/>
<param key="batch-delay" value="50"/>
</http-connector>
<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>
<http-acceptor http-listener="default" name="http-acceptor"/>
<http-acceptor http-listener="default" name="http-acceptor-throughput">
<param key="batch-delay" value="50"/>
<param key="direct-deliver" value="false"/>
</http-acceptor>
<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-group">
<jgroups-stack>udp</jgroups-stack>
<jgroups-channel>hq-cluster</jgroups-channel>
<connector-ref>
http-connector
</connector-ref>
</broadcast-group>
</broadcast-groups>
<discovery-groups>
<discovery-group name="dg-group">
<jgroups-stack>udp</jgroups-stack>
<jgroups-channel>hq-cluster</jgroups-channel>
</discovery-group>
</discovery-groups>
<cluster-connections>
<cluster-connection name="my-cluster">
<address>jms</address>
<connector-ref>http-connector</connector-ref>
<use-duplicate-detection>true</use-duplicate-detection>
<forward-when-no-consumers>false</forward-when-no-consumers>
<max-hops>1</max-hops>
<discovery-group-ref discovery-group-name="dg-group"/>
</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>
<max-size-bytes>10485760</max-size-bytes>
<page-size-bytes>2097152</page-size-bytes>
<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:/jms/MessageConnectionFactory"/>
<entry name="java:jboss/jms/MessageConnectionFactory"/>
<entry name="java:/ConnectionFactory"/>
</entries>
<reconnect-attempts>-1</reconnect-attempts>
</connection-factory>
<connection-factory name="RemoteConnectionFactory">
<connectors>
<connector-ref connector-name="http-connector"/>
</connectors>
<entries>
<entry name="java:jboss/exported/jms/MessageConnectionFactory"/>
<entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
</entries>
<ha>true</ha>
<block-on-acknowledge>true</block-on-acknowledge>
<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"/>
<entry name="java:jboss/DefaultJMSConnectionFactory"/>
</entries>
</pooled-connection-factory>
</jms-connection-factories>
<jms-destinations>
<jms-queue name="ExpiryQueue">
<entry name="jms/queue/ExpiryQueue"/>
<entry name="java:jboss/exported/jms/queue/ExpiryQueue"/>
<durable>true</durable>
</jms-queue>
<jms-queue name="DLQ">
<entry name="jms/queue/DLQ"/>
<entry name="java:jboss/exported/jms/queue/DLQ"/>
<durable>true</durable>
</jms-queue>
<jms-topic name="commonTopic">
<entry name="java:/jms/commonTopic"/>
<entry name="java:jboss/exported/jms/commonTopic"/>
</jms-topic>
</jms-topic>
</jms-destinations>
</hornetq-server>
</subsystem>
假的
真的
102400
udp
总部集群
http连接器
udp
总部集群
jms
http连接器
真的
假的
1.
jms.queue.DLQ
jms.queue.ExpiryQueue
10485760
2097152
10
1000
-1
真的
真的
-1
真的
真的
我发现问题是由消息持久性引起的。
5秒的生存时间不足以让节点A使用该消息。
我在expiredQueue上找到过期邮件。
每个节点每10秒发送一条消息,因此我不理解消息在节点A上过期的原因