TIBCO JMS with .Net client - problem with stuck messages in queues
We are using TIBCO JMS 4.3.3 with the same version of .Net TIBCO.EMS.dll for .net 2.0 We are having huge problems with stuck messages in queues. We are consuming messages from one queue which is bridged from the topic. Our application creates multiple consumers with long lived sessions - each long lived sessions has one consumer. The sessions and consumers are created in the main thread, but consumers themselves are consuming messages using Receive() method with timeout on separate threads. Each consumer has own thread in which it's working. On each successful receive we are calling Commit on a session which created consumer who received the message (sorry for ugly wording).
The problem is that when this queues is heavily filled (by the bridge from topic) many of messages are getting stuck - none of threads can receive them and we can clearly see them browsing the queue and they get reprocessed if we restart our application. Also we see that when messages are getting stuck number of sent messages are becoming non equal to number of acknowledged messages 开发者_JS百科if running 'show consumer' in TIBCO console.
We are absolutely lost - we tried enabling and disabling prefetch for this queue. Neither solution worked. We increased receive timeout from 1 second to 1 minute and still messages are getting stuck when number of pending messages are crossing some boundary.
Any help, tip or suggestion will be highly appreciated.
In the end we found out that there was a bug in 4.4.3 version of TIBCO EMS causing some clients connections to freeze. It was fixed in 5.x
It seems somewhere in your thread code acting as a Queue Receiver is missing acknowledgment \ Commit. I suggest to review the consumers code.. and perhaps multi-threading. I assume all threads are listening to unique queues..
-hB
精彩评论