Создание заголовка MQMD в вычислительном узле брокера сообщений IBM

У меня проблемы с добавлением заголовка MQMD в вычислительный узел. Пробовал что-то подобное:

SET OutputRoot.Properties = InputRoot.Properties;
CREATE LASTCHILD OF OutputRoot DOMAIN('MQMD') NAME 'MQMD';
SET OutputRoot.MQMD.Format =  MQFMT_NONE; 
SET OutputRoot.MQMD.CodedCharSetId = 1208;
SET OutputRoot.MQMD.Encoding = 546;

Но всегда получается вот это исключение:

Text:CHARACTER:Caught exception and rethrowing
Insert
Type:INTEGER:14
Text:CHARACTER:test.MyAdp.AddHeader
RecoverableException
File:CHARACTER:F:\build\slot1\S900_P\src\CommonServices\ImbValue.cpp
Line:INTEGER:989
Function:CHARACTER:ImbValue::stateError
Type:CHARACTER:
Name:CHARACTER:
Label:CHARACTER:
Catalog:CHARACTER:BIPmsgs
Severity:INTEGER:3
Number:INTEGER:2329
Text:CHARACTER:Value not valid

Конечно, без добавления заголовка MQMD все работает отлично. Я попытался использовать другие форматы, такие как MQFMT_STRING, MQFMT_RF_HEADER_2 (с добавленным заголовком MQRFH2), но с тем же результатом.

Кто-нибудь может дать мне какую-нибудь подсказку? Можно ли как-нибудь получить более содержательную диагностику от брокера?

UPD Вот трассировка перед входом в вычислительный узел, который пытается добавить заголовок MQMD. Узел трассировки после вычислений никогда не достигается.

( ['GENERICROOT' : 0xac05710]
(0x01000000:Name):Properties = ( ['GENERICPROPERTYPARSER' : 0xaf5ccc0]
(0x03000000:NameValue):MessageSet             = '' (CHARACTER)
(0x03000000:NameValue):MessageType            = '' (CHARACTER)
(0x03000000:NameValue):MessageFormat          = '' (CHARACTER)
(0x03000000:NameValue):Encoding               = 546 (INTEGER)
(0x03000000:NameValue):CodedCharSetId         = 0 (INTEGER)
(0x03000000:NameValue):Transactional          = TRUE (BOOLEAN)
(0x03000000:NameValue):Persistence            = FALSE (BOOLEAN)
(0x03000000:NameValue):CreationTime           = NULL
(0x03000000:NameValue):ExpirationTime         = -1 (INTEGER)
(0x03000000:NameValue):Priority               = 0 (INTEGER)
(0x03000000:NameValue):ReplyIdentifier        = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):ReplyProtocol          = 'UNKNOWN' (CHARACTER)
(0x03000000:NameValue):Topic                  = NULL
(0x03000000:NameValue):ContentType            = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceType     = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceToken    = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourcePassword = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceIssuedBy = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedType     = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedToken    = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedPassword = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedIssuedBy = '' (CHARACTER)
)
(0x01000000:Name):BLOB       = ( ['none' : 0xb30d460]
(0x03000000:NameValue):BLOB = X'314........d0a' (BLOB)
)
) 

UPD2 Вот фрагмент пользовательской трассировки, сообщение появляется в узле try-catch сразу после возвращения из вычислительного узла, который создает MQMD.

2015-09-14 13:20:06.936871     1200   UserTrace   BIP2539I: Node '': Evaluating expression ''InputRoot.BLOB.BLOB || CAST(header AS BLOB CCSID 1208)'' at ('test.MyAdp_AddHeader.Main', '31.51'). This resolved to ''X'314....3d0d'''. 
2015-09-14 13:20:06.937023     1200   UserTrace   BIP2566I: Node 'test.MyAdp.AddHeader': Assigning value       ''X'314...6d0'... (data of len 3915 truncated)'' to field / variable ''OutputRoot.BLOB.BLOB''. 
2015-09-14 13:20:06.937043     1200   UserTrace   BIP2537I: Node 'test.MyAdp.AddHeader': Executing statement   ''RETURN TRUE;'' at ('test.MyAdp_AddHeader.Main', '33.4'). 
2015-09-14 13:20:06.937718     1200   UserTrace   BIP4081I: Message propagated to catch terminal from try-catch node 'test.MyAdp.ErrorHandler.Timer.Try Catch'. 
                                   The try-catch node 'test.MyAdp.ErrorHandler.Timer.Try Catch' has caught an exception which occurred in a node connected to its try terminal. The message has been augmented with an exception list and is propagating it to any nodes connected to its catch terminal for further processing. See the following messages for details of the exception list. 
                                   No user action required. 

person user3714601    schedule 19.08.2015    source источник


Ответы (4)


Некоторые атрибуты в папке «Свойства» могут быть неожиданно нулевыми. Проблема возникает, когда они копируются в папку MQMD. Пользовательская или системная трассировка покажет вам, какой именно.

Ваша проблема связана с узлом уведомления о тайм-ауте? У меня была проблема с Properties.CreationTime = null. Я видел, как у других была проблема с Properties.Topic = null.

Я закодировал это, чтобы обойти проблему.

person deJean    schedule 01.09.2015
comment
Извините за поздний ответ, проблема действительно может быть связана с узлом уведомления Timout, поскольку поток начинается с него. Однако я вижу, что Properties.CreationTime заполнен, только Properties.Topic имеет значение null. Есть предложения о том, чем его можно заполнить? - person user3714601; 07.09.2015
comment
Тема может оставаться пустой, если вы ее не используете. Трассировка покажет вам, чего не хватает. - person deJean; 09.09.2015
comment
Только что добавили трассировку, дайте мне знать, если у вас есть какие-либо предложения. - person user3714601; 09.09.2015
comment
Позвольте сообщению с контролируемым временем (не входом в очередь) пройти и остановить ваш след. Затем проанализируйте свой след. - person deJean; 11.09.2015
comment
Не уверен, что понял суть. Отправленная трассировка была произведена с помощью сообщения с контролем времени. Что еще мы можем получить от трассировки? - person user3714601; 11.09.2015
comment
Хм, вы использовали узел трассировки. См. Верхний комментарий. Сводка процедуры трассировки пользователя находится здесь < / а>. - @Steve Parsons 24 августа в 19:29 - person deJean; 12.09.2015

Недостаточно подробностей, чтобы сказать, что происходит. Какую версию MB / IIB вы используете?

Возможно, вы столкнулись с проблемой, описанной здесь.

Имея это в виду, попробуйте изменить свой ESQL на:

SET OutputRoot.Properties.CodedCharSetId = 1208 ;
SET OutputRoot.Properties.Encoding = 546 ;
SET OutputRoot.MQMD.Format = MQMFT_NONE ;
SET OutputRoot.MQMD.CodedCharSetId = 1208 ;
SET OutputRoot.MQMD.Encoding = 546 ;
...
person Steve Parsons    schedule 23.08.2015
comment
Получите более подробную диагностику, воссоздав проблему с включенной пользовательской трассировкой. Начните здесь для информации о трассировке пользователя. Сводка процедуры трассировки пользователя находится здесь. - person Steve Parsons; 24.08.2015
comment
Извините за поздний ответ, но установка свойств, как указано выше, в моем случае ничего не изменила. Кстати, ссылка на описание проблемы не работает. - person user3714601; 07.09.2015
comment
Забыл про версию, пользуюсь IIB 9.0 - person user3714601; 07.09.2015
comment
Спасибо, что сообщили мне о неработающей ссылке, которую я обновил. Я думаю, нам нужна трассировка пользователя, чтобы получить больше диагностики. - person Steve Parsons; 08.09.2015
comment
Только что добавили трассировку, дайте мне знать, если у вас есть какие-либо предложения. - person user3714601; 09.09.2015

Вы пытались изменить
CREATE LASTCHILD OF OutputRoot DOMAIN('MQMD') NAME 'MQMD';
на
CREATE LASTCHILD OF OutputRoot DOMAIN('MQMD');
Имя указывать не нужно

person Aleksander Kolev    schedule 14.03.2016

Вы пробовали установить формат как символьное значение? Согласно документации это то, что ожидается:

http://www-01.ibm.com/support/knowledgecenter/SSMKHH_10.0.0/com.ibm.etools.mft.doc/ad09700_.htm

ie/

SET OutputRoot.MQMD.Format =  'MQFMT_NONE';
person Dave    schedule 28.08.2015
comment
Для меня это звучит немного странно, поскольку обычно MQFMT_NONE преобразуется в строку, содержащую несколько пробелов. Во всяком случае, попытался установить это безуспешно. - person user3714601; 07.09.2015
comment
Анализатор MQMD превратит его в значение, представленное символьной константой MQ, когда он сериализует MQMD. отправленное вами исключение генерируется, потому что механизм ESQL ожидает один тип данных, а вы даете ему другой. Имея это в виду, когда вы используете образец, который я опубликовал выше, вы получаете точно такое же исключение или знаете, что что-то еще идет не так? - person Dave; 10.09.2015
comment
Да, исключение было точно таким же. - person user3714601; 10.09.2015