Недавно я унаследовал среду тестирования, использующую PYMQI для помещения сообщения в IBM Websphere Queue. Я исправил большую часть кода, который мне нужен, перейдя по этой ссылке
https://dsuch.github.io/pymqi/examples.html#how -to-correlate-request-and-response-messages-using-correlationid
Единственная нерешенная проблема - это формат идентификатора корреляции. Я пробовал довольно много вариантов, но MQ преобразует идентификатор корреляции в байтовый массив (кажется, это настройка по умолчанию для IBM MQ), прежде чем бросать его на Q. Все мои последующие системы ищут значение HEX и ломаются.
Я застрял на этом уже несколько дней. Есть ли способ принудительно указать идентификатор корреляции в свойствах сообщения?
Пожалуйста, дайте мне знать
С уважением, Аравинд
@ JoshM c большое спасибо за ответ. Это проприетарный код, поэтому его несложно вставить целиком, но вот соответствующий фрагмент. Нисходящая система смотрит на этот идентификатор корреляции JMS, чтобы увеличить его и вернуть в очередь. Когда я отправляю это через приведенный ниже код, он попадает в очередь, преобразуется в массив байтов, однако проверка чтения нижестоящей системы не выполняется. Я хочу, чтобы это попадало в очередь как шестнадцатеричное значение, так как в нем должно быть точное значение, которое я передаю, а не массив байтов.
queue = self._open_write_queue(queue_name)
put_mqmd = pymqi.md()
put_mqmd.Format = CMQC.MQFMT_STRING
CCSID = 1202
put_opts = pymqi.pmo()
# Set the MsgType to request.
# put_mqmd["MsgType"] = CMQC.MQMT_REQUEST
put_mqmd["MsgId"] = '00002Y0001T1'
put_mqmd["CorrelId"] = '00002Y0001T1'
put_opts = pymqi.PMO(Options=CMQC.MQPMO_NO_SYNCPOINT +
CMQC.MQPMO_FAIL_IF_QUIESCING + CMQC.MQRO_PASS_CORREL_ID)
queue.put(message, put_mqmd, put_opts)
когда я помещаю сообщение в очередь, оно успешно отправляется , но не обрабатывается нижестоящей системой:
На скриншоте выше первое сообщение в очереди было отправлено с помощью приложения JMSToolBox, которое имеет correlationId, как ожидается нижестоящими системами. Второе сообщение было отправлено с использованием структуры робота / pymqi, у которого отображается идентификатор корреляции: 30303 ..... Также обратите внимание, что JMSDestination отображается как null для второго сообщения (для первого сообщения, отправленного вручную, как 'JMSDestination: queue: /// QueueName'
Теперь у меня две проблемы: CorrelationId не подходит, как я ожидал, и JMSDestination: null. Я не уверен, как я могу установить пункт назначения с помощью библиотеки pymqi (или это установлено на уровне Q-Manager). Любая помощь приветствуется.
Снимок экрана сообщения, отправленного JMSToolBox:
Снимок экрана сообщения, отправленного с использованием robotframework-pymqi:
Единственное различие, которое я сейчас обнаружил в двух сообщениях, - это JMSDestination: Null в JMSHeader для сообщения, отправленного с помощью Pymqi. Я также попытался изменить PROPCTL настройка очереди - но не помогло.
Могу ли я отправить свойства java с помощью pymqi?