.replyToQueueManagerName и replyToQueueName в другой среде MqEnvironment

1

Как мне пойти, если имя replyToQueueManagerName и replyToQueueName не входит в ту же MQEnvironment, что и мое requestQueueuManagerName и requestQueueName?

Пример:

//MQEnvironment for requestMessage
MQEnvironment.hostname = requestMessageHost;
MQEnvironment.channel = requestMessageChannel;
MQEnvironment.port = requestMessagePort

MQQueueManager qMgr = new MQQueueManager(requestQueueuManagerName);

MQQueue inputQueue = qMgr.accessQueue(requestQueueName,MQC.MQOO_OUTPUT);

MQMessage requestMessage = new MQMessage();
MQPutMessageOptions pmo = new MQPutMessageOptions();

requestMessage.writeString(sampleXmlRequest);
requestMessage.replyToQueueManagerName = replyToQueueManagerName;
requestMessage.replyToQueueName = replyToQueueName; 

В VB.NET можно подключиться к QueueManagers и Queues, которые находятся в разных средах.

Теги:
ibm-mq

2 ответа

3
Лучший ответ

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

Вы можете создать соединение с менеджером очереди, предоставив информацию о соединении через хеш-таблицу. Этот фрагмент кода находится на С#.

       Hashtable mqProps = new Hashtable();
       mqProps.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
       mqProps.Add(MQC.HOST_NAME_PROPERTY, "<yourhost>");
       mqProps.Add(MQC.PORT_PROPERTY, port);
       mqProps.Add(MQC.CHANNEL_PROPERTY, "<svrconn channel name>");

       MQQueueManager qmConn = new MQQueueManager("replyQM", mqProps);

Вот код Java:

      Hashtable<String, Object> properties;
      properties = new Hashtable<String, Object>();
      properties.put("hostname", "replyqmhost");
      properties.put("port", new Integer(1414));
      properties.put("channel", "REPLYQM.SVRCONN");
      properties.put(MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY,true);
      properties.put(MQConstants.USER_ID_PROPERTY, "<user id>");
      properties.put(MQConstants.PASSWORD_PROPERTY, "<password>");

      /**
        * Connect to a queue manager 
        */
      MQQueueManager queueManager = new MQQueueManager("replyQM", properties);
  • 0
    Итак, если requestQM и replyToQM находятся на двух разных серверах / хостах, то я просто создаю разные Hashtables для каждого QM? Это означает, что у меня будет фрагмент кода выше, дважды. Один раз для моего запроса QM и один раз для моего replyToQM.
  • 1
    Да. Вы пытаетесь направить ответное сообщение другой очереди на другой администратор очередей после обработки сообщения запроса?
Показать ещё 1 комментарий
3

Хотя верно, что ответ Shashi показывает вам, как подключиться к двум различным менеджерам очередей в одном приложении, обычно это не способ обрабатывать ReplyToQ в другом диспетчере очередей. Почти всегда будет иметь место, что ReplyToQ/ReplyToQMgr находится в другом менеджере очередей. Но у вас должны быть каналы и очередь передачи, чтобы вернуть это сообщение в ответ ReplyToQMgr, и просто поместите ответное сообщение в тот же менеджер очередей, из которого вы получили запрос запроса.

Это имеет ряд преимуществ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню