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