MQ на Wildfly - одно и то же сообщение получено несколько раз - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь подписаться на очередь сообщений, используя MQ и wildfly, и у меня странное поведение с источником MQ Client.Я получаю одно и то же сообщение несколько раз, на моем сервере не исключение.Вывод в моем лог-файле выглядит следующим образом (это всего лишь тестовый код, я сократил исходный код до простого лог-вывода, чтобы исключить сложность):

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
...