Wildfly上的MQ-多次收到同一条消息

时间:2018-11-29 12:14:48

标签: jms wildfly ibm-mq

我尝试使用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)

有趣的是,

  • 某些消息仅收到1次,数千次收到
  • 一段时间后提交消息,队列变空
  • 该队列属于第三方提供商,因此对我来说是一种黑匣子(无服务器端日志等,我只在客户端)

可能存在事务问题,并且提交发生到很晚,直到提交发生,系统才会多次读取消息?我不知道...

这是一条消息示例(没有内容,只有标题):

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)

软件版本:

  • 8.0.0.10
  • Wildfly 11

0 个答案:

没有答案