Обойти предварительную выборку в Tibco EMS и.NET API
Все в контексте Tibco EMS 5.* и API.NET.
Я должен работать по существующей модели обработки сообщений, в которой в цикле:
- соединение создано / открыто
- сессия создана / открыта
- получатель сообщения создан
- метод приема называется
если сообщение!= ноль, то мы используем его и либо фиксируем, либо откатываем транзакцию (в базовом сеансе). Система тянет каждую секунду в этой модели.
Я создал фабрику соединений, которая гарантирует, что создаются только новые сеансы (если предыдущий сеанс все еще используется). Таким образом, система работает на том же соединении.
Однако я столкнулся с проблемой предварительной выборки, так как каждый вызов Receive (через интерфейс.NET) возвращает одно сообщение и помещает несколько (pre-fetch-1) в локальную очередь. Так что в следующий раз я действительно должен повторно использовать ту же сессию, чтобы читать уже извлеченные сообщения. Я положил в обертки, чтобы повторно использовать получателя сеанса и сообщения, пока там что-то есть (Receive не вернет ноль). Этот подход работает, но кажется, что при получении я мог получить null, даже если что-то локально получено. Также кажется, что, пока я нахожусь на том же соединении, извлеченные сообщения будут помечены как доставленные (даже если сессия явно закрыта).
Кто-нибудь знает, как открыть соединение / сеанс с pre-fetch = 1? Или есть лучшее решение?
Заранее спасибо,
1 ответ
Обходной путь: отключить предварительную выборку на уровне очереди.