Я пытаюсь подписаться на очередь сообщений, используя 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)
Версии программного обеспечения: