TIBCO JMS с клиентом .NET - Проблема с застрявшими сообщениями в очереди
Вопрос
Мы используем TIBCO JMS 4.3.3 с той же версией .NET TIBCO.EMS.DLL для .NET 2.0 У нас есть огромные проблемы с застрявшими сообщениями в очереди. Мы потребляем сообщения из одной очереди, которая преодолела темы. Наше приложение создает несколько потребителей с долговечными сеансами - в каждом долговечном сеансе есть один потребитель. Сессии и потребители создаются в основном потоке, но сами потребители потребляют сообщения с использованием метода rete () с тайм -аутом в отдельных потоках. У каждого потребителя есть собственный поток, в которой он работает. На каждом успешном получении мы называем Commit на сессии, которая создала потребителя, который получил сообщение (извините за уродливую формулировку).
Проблема заключается в том, что когда эти очереди сильно заполняются (по мосту из темы), многие сообщения застряли - ни одна из потоков не может их получить, и мы можем ясно видеть, как они просматривают очередь, и они переизданы, если мы перезагружаем наше приложение. Кроме того, мы видим, что когда сообщения застряли, количество отправленных сообщений не равны количеству подтвержденных сообщений, если запуск «Показать потребитель» в консоли TIBCO.
Мы абсолютно потеряны - мы пытались включить и отключить предварительную фигуру для этой очереди. Ни одно решение не сработало. Мы увеличили тайм -аут приема с 1 секунды до 1 минуты, и все еще сообщения застряли, когда количество ожидающих сообщений пересекает некоторую границу.
Любая помощь, совет или предложение будут высоко оценены.
Решение
В конце концов, мы узнали, что в версии TIBCO EMS была ошибка, заставляя некоторые клиенты подключения к замораживанию. Он был зафиксирован в 5.x
Другие советы
Кажется, где -то в коде вашего потока действует как приемник очередей, не хватает подтверждения Commit. Я предлагаю просмотреть код потребителей .. и, возможно, многопоточное. Я предполагаю, что все темы слушают уникальные очереди ..
-HB