【问题标题】:Building MQMD header in compute node of IBM message broker在 IBM 消息代理的计算节点中构建 MQMD 标头
【发布时间】:2015-11-13 04:32:47
【问题描述】:

我在尝试在计算节点中添加 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 标头的计算节点之前的跟踪。永远不会到达 Compute 之后的跟踪节点。

( ['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 这是用户跟踪的片段,消息从创建 MQMD 的计算节点返回后立即出现在 try-catch 节点中。

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. 

【问题讨论】:

    标签: ibm-mq messagebroker ibm-integration-bus extended-sql


    【解决方案1】:

    您的“属性”文件夹中的某些属性可能意外为空。 将它们复制到 MQMD 文件夹时会出现此问题。 用户或系统跟踪将告诉您是哪一个。

    您的问题与超时通知节点有关吗? 我遇到了 Properties.CreationTime = null 的问题 我看到其他人遇到 Properties.Topic = null 的问题

    我对其进行了编码以绕过该问题。

    【讨论】:

    • 对不起,回答晚了,这个问题确实可能与 Timout 通知节点有关,因为流程从它开始。但是我看到 Properties.CreationTime 已填充,只有 Properties.Topic 为空。关于它可以填充什么的任何建议?
    • 如果您不使用主题,主题可以保持为空。跟踪会告诉您缺少什么。
    • 刚刚添加了trace out,如果您有任何建议,请告诉我。
    • 让时间控制的消息(不是队列输入)通过并停止跟踪。然后分析你的踪迹。
    • 不知道我明白了。发布的跟踪是由时间控制的消息产生的。我们还能从追踪中得到什么?
    【解决方案2】:

    没有足够的细节来说明正在发生的事情。您使用的是哪个版本的 MB/IIB?

    您可能遇到了here 描述的问题。

    考虑到这一点,尝试将您的 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 ;
    ...
    

    【讨论】:

    • 通过启用用户跟踪重新创建问题来捕获更详细的诊断信息。启动here 以获取有关用户跟踪的信息。用户跟踪过程的摘要是here
    • 抱歉,回答迟了,但在我的情况下,如上所述设置属性没有任何改变。顺便说一句,问题描述的链接已损坏。
    • 忘记版本了,我用的是IIB 9.0
    • 感谢您告知我已更新的断开链接。我认为我们需要用户跟踪来获得更多诊断信息。
    • 刚刚添加了trace out,如果您有任何建议,请告诉我。
    【解决方案3】:

    你有没有尝试改变
    CREATE LASTCHILD OF OutputRoot DOMAIN('MQMD') NAME 'MQMD';

    CREATE LASTCHILD OF OutputRoot DOMAIN('MQMD');
    无需指定名称

    【讨论】:

      【解决方案4】:

      您是否尝试将格式设置为字符值?根据文档,这是预期的:

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

      即/

      SET OutputRoot.MQMD.Format =  'MQFMT_NONE';
      

      【讨论】:

      • 这对我来说听起来有点奇怪,因为通常 MQFMT_NONE 被解析为包含多个空格的字符串。无论如何,尝试设置它没有成功。
      • MQMD 解析器在序列化 MQMD 时会将其转换为 MQ 符号常量表示的值。您发布的异常被抛出,因为 ESQL 引擎需要一种数据类型,而您正在给它一个不同的数据类型。考虑到这一点,当您使用我上面发布的示例时,您是否会遇到完全相同的异常,或者您知道会出现其他问题吗?
      • 是的,异常完全一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多