TIBCO JMS с клиентом.Net - проблема с зависшими сообщениями в очередях

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

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

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

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

2 ответа

Решение

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

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

-hB

Другие вопросы по тегам