В JMeter у меня есть сэмплер JMS Publisher, настроенный на отправку сообщения в удаленную очередь. Сообщение успешно публикуется в удаленной очереди, работающей на сервере ActiveMQ Artemis, и в прослушивателе дерева результатов просмотра (запрос -> заголовки запроса) я вижу некоторые свойства JMS (которые я установил в разделе «Свойства JMS» сэмплера JMS Publisher). . Однако некоторые из этих свойств заголовка, которые я вижу, я никогда не устанавливал (они неявно устанавливаются сэмплером JMS Publisher): JMSMessageId, JMSTimestamp, JMSType, JMSExpiration.
JMSMessageId выглядит следующим образом:
JMSMessageId ID:ip-100-100-100-100.eu-west-1.compute.internal-44444-1111111111111-2:2:2:1:1
Я понимаю, что этот заголовок JMSMessageId генерируется во время выполнения, и правила его создания зависят от поставщика JMS. Он может быть уникальным только для текущей установки сервера сообщений или может быть универсальным.
Я хотел бы знать, могу ли я получить значение свойства JMSMessageId после его создания и использовать его в качестве значения для другого свойства JSM с именем JMSCorrelationID до публикации сообщения.
В подавляющем большинстве случаев messageId и корреляция не связаны.
Взгляните на документацию:
Использование идентификатора корреляции
Идентификатор корреляции используется для корреляции ответные сообщения с сообщениями запроса, когда приложение вызывает операция запрос-ответ. С помощью WebSphere® MQ и WebSphere MQ JMS вы можете коррелировать, используя либо идентификатор корреляции, либо идентификатор сообщения. В В большинстве случаев вызывающий абонент позволяет администратору очередей выбрать идентификатор сообщения и ожидает, что приложение скопирует этот идентификатор сообщения в корреляцию Идентификатор ответного сообщения. Но есть и другие возможности. А вызывающий абонент может указать конкретное значение в идентификаторе корреляции и ожидать это значение будет скопировано в идентификатор корреляции ответа. Звонящий может также потребоваться, чтобы идентификатор сообщения запроса был копируется в идентификатор сообщения ответного сообщения.
Поэтому вместо того, чтобы пытаться получить значение, сгенерированное системой или библиотекой MQ, вы можете каким-то образом предварительно сгенерировать его и установить самостоятельно. В этом случае вы можете использовать Контроллер while для ожидания, пока сообщение не появится в очереди, и Контроллер транзакций для измерения времени сквозной обработки сообщения.
Чтобы получить JMSMessageID
, сгенерированный для сообщения провайдером, вам необходимо вызвать getJMSMessageID()
. Однако, чтобы использовать это значение для другого заголовка или свойства сообщения, вам придется вызвать этот метод перед отправкой сообщения. Проблема в том, что назначенное провайдером значение JMSMessageID
недоступно до тех пор, пока сообщение не будет отправлено. В JavaDoc для getJMSMessageID() указано:
Когда метод
send
илиpublish
возвращает значение, он содержит значение, назначенное поставщиком.
Следовательно, вы не можете использовать JMSMessageID
для любого другого заголовка или значения свойства в том же сообщении.