我尝试使用MQ和wildfly订阅消息队列,并且我的MQ客户端源有异常行为。我多次收到相同的消息,在我的服务器上也不例外。我的日志文件中的输出看起来像这样(这只是一个测试代码,我将源简化为简单的日志输出以排除复杂性):
2018-11-28 15:06:14,927 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 49)
2018-11-28 15:06:14,930 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 2)
2018-11-28 15:06:14,930 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 1)
2018-11-28 15:06:15,014 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 21)
2018-11-28 15:06:15,027 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 32)
2018-11-28 15:06:15,044 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 45)
2018-11-28 15:06:15,050 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 40)
2018-11-28 15:06:15,130 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 28)
2018-11-28 15:06:15,133 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 34)
2018-11-28 15:06:15,145 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 14)
2018-11-28 15:06:15,159 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 32)
2018-11-28 15:06:15,165 INFO [com.mystuff.interfaces.messages.MyMessageListener] Message consumed: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1(js=,t=default-threads - 8)
有趣的是,
可能存在事务问题,并且提交发生到很晚,直到提交发生,系统才会多次读取消息?我不知道...
这是一条消息示例(没有内容,只有标题):
JMSMessage class: jms_text
JMSType: null
JMSDeliveryMode: 2
JMSDeliveryDelay: 0
JMSDeliveryTime: 0
JMSExpiration: 0
JMSPriority: 5
JMSMessageID: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1
JMSTimestamp: 1540366098490
JMSCorrelationID: ID:c3e2d840d8f0f1e34040404040404040d5204b6ac8457cd1
JMSDestination: null
JMSReplyTo: queue://Q01T/R121.G6.?targetClient=1
JMSRedelivered: false
JMSXAppID: RPRI196Y
JMSXDeliveryCount: 1
JMSXUserID: RPRI196
JMS_IBM_Character_Set: IBM273
JMS_IBM_Encoding: 785
JMS_IBM_Format: MQSTR
JMS_IBM_MsgType: 8
JMS_IBM_PutApplType: 2
JMS_IBM_PutDate: 20181024
JMS_IBM_PutTime: 07281849
这是jboss-ejb3.xml配置:
<message-driven>
<ejb-name>Testmdb.xxxxx</ejb-name>
<ejb-class>com.mystuff.messages.TestMessageListener</ejb-class>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>messagingType</activation-config-property-name>
<activation-config-property-value>javax.jms.MessageListener</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>${xxxxx.mq.defaultdestinationType}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>java:/xxxx</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>useJNDI</activation-config-property-name>
<activation-config-property-value>true</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>channel</activation-config-property-name>
<activation-config-property-value>${xxxxx.mq.channel.xxxxx}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>hostName</activation-config-property-name>
<activation-config-property-value>${xxxxx.mq.hostName}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>queueManager</activation-config-property-name>
<activation-config-property-value>${xxxxx.mq.queueManager}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>port</activation-config-property-name>
<activation-config-property-value>${xxxxx.mq.port}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>transportType</activation-config-property-name>
<activation-config-property-value>CLIENT</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>acknowledgeMode</activation-config-property-name>
<activation-config-property-value>AUTO_ACKNOWLEDGE</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
<mdb:resource-adapter-binding>
<ejb-name>Testmdb.xxxxx</ejb-name>
<mdb:resource-adapter-name>wmq.jmsra</mdb:resource-adapter-name>
</mdb:resource-adapter-binding>
这是.cli配置:
/subsystem=resource-adapters/resource-adapter=wmq.jmsra:add(archive=wmq.jmsra.rar, transaction-support=XATransaction)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra/admin-objects=xxxx:add(class-name="com.ibm.mq.connector.outbound.MQQueueProxy", jndi-name="java:/xxxx")
/subsystem=resource-adapters/resource-adapter=wmq.jmsra/admin-objects=xxxx/config-properties=baseQueueName/:add(value=xxxx)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra/admin-objects=xxxx/config-properties=targetClient/:add(value=MQ)
软件版本: