Мы используем TIBCO JMS 4.3.3 с той же версией .Net TIBCO.EMS.dll для .net 2.0
У нас огромные проблемы с застрявшими сообщениями в очередях. Мы потребляем сообщения из одной очереди, которая связана с темой. Наше приложение создает несколько потребителей с долгоживущими сеансами - у каждого долгоживущего сеанса есть один потребитель. Сеансы и потребители создаются в основном потоке, но сами потребители используют сообщения с использованием метода Receive () с таймаутом в отдельных потоках. У каждого потребителя есть свой поток, в котором он работает. При каждом успешном получении мы вызываем Commit в сеансе, который создал получателя, который получил сообщение (извините за уродливые формулировки).
Проблема в том, что когда эти очереди сильно заполнены (по мосту из темы), многие сообщения застряли - ни один из потоков не может их получить, и мы можем ясно видеть, как они просматривают очередь, и они обрабатываются повторно, если мы перезапускаем приложение. Также мы видим, что когда сообщения застревают, количество отправленных сообщений становится не равным количеству подтвержденных сообщений, если в консоли TIBCO запущено «show customer».
Мы абсолютно потерялись - мы попытались включить и отключить предварительную выборку для этой очереди. Ни одно из решений не сработало. Мы увеличили тайм-аут приема с 1 секунды до 1 минуты, и все еще сообщения застревают, когда число ожидающих сообщений пересекает некоторую границу.
Любая помощь, советы или предложения будут высоко оценены.