2010-11-16 2 views
1

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

Проблема заключается в том, что, когда эти очереди заполняются сильно (от моста от темы), многие сообщения застревают - ни один из потоков не может их получить, и мы можем четко видеть, как они просматривают очередь, и они перерабатываются, если мы перезапускаем наше приложение. Также мы видим, что когда сообщения застревают, количество отправленных сообщений становится не равным количеству подтвержденных сообщений при запуске «show consumer» в консоли TIBCO.

Мы абсолютно потеряны - мы попытались включить и отключить предварительную выборку для этой очереди. Ни одно решение не работало. Мы увеличили тайм-аут приема от 1 секунды до 1 минуты, и все еще сообщения застревают, когда количество ожидающих сообщений пересекает границу.

Любая помощь, подсказка или предложение будут высоко оценены.

ответ

1

В конце концов, мы обнаружили, что там была ошибка в 4.4.3 версии TIBCO EMS вызывает некоторые клиенты подключения к замораживанию. Он был зафиксирован в 5.x

0

Кажется, что в вашем коде потока, действующем как приемник очереди, отсутствует подтверждение \ Commit. Предлагаю просмотреть код потребителя .. и, возможно, многопоточность. Я предполагаю, что все потоки прослушивания уникальных очередей ..

-hB