IBM WebSphere MQ - как мне читать только сообщения MQMT_REQUEST - PullRequest
1 голос
/ 01 декабря 2011

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

  1. Это прокси-сервер для WebSphere MQ для веб-приложения, который запрашивает другие системы - он отправляет запрос и ответы второй системы.
  2. Это сервер, который должен отвечать на другие системные запросы - другая система отправляет запрос, служба отвечает.

В сценарии 1 я жду ответа с определенным идентификатором корреляции.Однако в сценарии 2 я жду любого сообщения, являющегося запросом.Как я могу избежать ситуации, когда я буду читать ответ из сценария 2 и рассматривать его как запрос в сценарии 2?Я хотел бы отфильтровать сообщения, которые я прочитал в сценарии 2, только к сообщениям с типом сообщения MQMT_REQUEST.

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Используйте две разные очереди ввода.Затраты на выбор правильных сообщений из очереди при наличии смешанных типов сообщений значительно выше с точки зрения программной логики и индексации WMQ, чем при простом создании двух очередей.

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

Один хороший пример того, почему при расширении службы обычно предоставляется другая очередь конечных точек для новой версии.Например, служба, которая возвращает имя клиента на основе номера учетной записи, может находиться в очереди SVC.CUST.LOOKUP.V01.Если услуга улучшена, новая версия может быть доступна на SVC.CUST.LOOKUP.V02.Запрашивающие эту службу службы затем имеют возможность мигрировать из очереди V1 в очередь V2 по своему собственному расписанию, вместо того чтобы требовать от них всех конвертации сразу.1012 * хочет, чтобы очередь ответа вашего приложения была связана с его очередью конечной точки службы в этой ситуации.Эти две функции выполняют совершенно разные функции, подчиняются совершенно разным графикам контроля и улучшения изменений и т. Д.

0 голосов
/ 01 декабря 2011

Если это один и тот же сервис, читайте сообщения из очереди в одном месте (вероятно, ваш основной цикл, верно?), Когда приходит сообщение, проверьте его идентификатор корреляции и посмотрите, является ли это ответом сценария 1.Решите, какую обработку выполнять на основе этого теста.

...