Обойти предварительную выборку в Tibco EMS и .NET API - PullRequest
1 голос
/ 10 ноября 2010

Все в контексте Tibco EMS 5. * и .NET API

Я должен работать по существующей модели обработки сообщений, в которой в цикле:

  • соединение создано / открыто
  • сеанс создан / открыт
  • Создан получатель сообщения
  • метод приема называется

если сообщение! = Ноль, то мы используем его и либо фиксируем, либо откатываем транзакцию (в базовом сеансе). Система тянет каждую секунду в этой модели.

Я создал фабрику соединений, которая обеспечивает создание только новых сеансов (если предыдущий сеанс все еще используется). Таким образом, система работает на том же соединении.

Однако я столкнулся с проблемой предварительной выборки, поскольку каждый вызов Receive (через интерфейс .NET) возвращает одно сообщение и помещает несколько (pre-fetch-1) в локальную очередь. Так что в следующий раз я должен действительно использовать тот же сеанс, чтобы читать сообщения, которые уже были извлечены. Я положил в обертки, чтобы повторно использовать получателя сеанса и сообщения, пока там что-то есть (Receive не вернет ноль). Этот подход работает, но кажется, что при получении я мог получить значение null, даже если что-то локально получено. Также кажется, что, пока я нахожусь на том же соединении, извлеченные сообщения будут помечены как доставленные (даже если сеанс явно закрыт).

Кто-нибудь может представить, как открыть соединение / сеанс с предварительной выборкой = 1? Или есть лучшее решение?

Заранее спасибо,

1 Ответ

1 голос
/ 10 февраля 2011

Обходной путь: отключить предварительную выборку на уровне очереди.

...