IBM MQ消息头详细介绍

细看 MQ 消息头(MQMD)的功能

  MQMD 是每个消息都带有的消息头信息,它由若干字段组成,这些字段都是 MQ 设计人员根据总结的应用需求而设置的。应用程序构建消息时应该对这些字段填入恰当的值,对于没有填入的字段,MQ会用默认值填充。开发应用程序时,充分理解并利用这些字段是十分必要的,这里逐一为大家进行介绍,并针对每个字段指明它在实际编程中一般会用来实现什么样的功能:

  StrucId:消息头结构名,固定为"MQMD"四个字符。根据这个字段,我们就能够在应用程序数据包中识别出MQMD的位置。

  Version :MQMD 版本号。

  Report:消息的报告选项,默认值为 MQRO_NONE。发送方程序通过设置此字段值以指定在消息传递出现意外、消息超时、消息到达、消息递出事件时是否需要报告消息和报告消息要包含什么内容。对于需要消息报告的程序,需要对这个字段与下面介绍的 ReplyToQ 和 ReplyToQMgr 字段一起进行设置,以对这些消息事件作出反应。

  Expiry:超时字段,单位是 0.1 秒,默认值是 MQEI_UNLIMITED,表示永不过期。消息放到目标队列里以后,如果超过这个指定时间还没有被程序读走,MQ 系统就会丢弃这个消息。如果这个消息设置了 Report 字段要求超时报告,系统会按照Report字段指定的方式返回一个超时报告。应用中通常要进行必要的消息超时机制设计,比如实现SOA框架下为保持交易一致性而广泛使用的 Compensation 机制,就可以用超时处理实现。

  Feedback:反馈字段,此字段与 Report 字段一起使用以指示报告的性质。

  Encoding:消息中数值数据(binary integer、packed-decimal integers、floating-point numbers等)的编码方式,默认值是 MQENC_NATIVE,因平台而异,此值不适用于 MQMD 结构本身的数字数据。实际应用中,为减少复杂性,要尽量少使用二进制的数值数据,这时就不必考虑此字段。

  CodedCharSetId:指定消息使用的字符集编码的 CCSID,默认值是 MQCCSI_Q_MGR,随平台不同而不同。MQ 在需要转码时根据这个字段的值来识别消息内容的编码方式,在主机上一般使用包含 GBK 字符集的 CCSID1388,对应的 UNIX 和 WINDOWS 系统下的 CCSID 是 1386。

  Format:给出描述消息体所符合的数据格式名称,格式名可以自己定义,默认值是 MQFMT_NONE。应用程序可以使用这个字段来指定发送消息的格式名,接收方根据这个名字对消息体做出不同解释。

  Priority:消息的优先级,最低优先级是0,默认值是MQPRI_PRIORITY_AS_Q_DEF。

  Persistence:消息持久性值,默认值为 MQPER_PERSISTENCE_AS_Q_DEF。如果消息是持久的,所有操作会记入MQ LOG;如果消息不是持久的则不记 LOG,MQ 系统中断或重启意味着还没被处理的消息将丢失。应用程序设计时要对是否使用持久性消息进行深入的考虑,虽然持久性消息比较可靠,但它的性能比非持久消息有很大的落后,如果可以使用应用逻辑来保证数据一致性,尽量少使用持久性消息。

  MsgId :消息标识,它用来区分消息,由 MQ 自动生成,任意两个消息的 MsgId 都不同。程序执行 MQPUT 后能从 MsgId 字段得到发出消息的 ID。MsgId 在某个 QMGR 里是唯一的,但理论上两个 QMGR 可能产生相同的 MsgId,虽然这种情况实际上极少会出现。编程上要注意,不要把两个 QMGR 产生的 MsgId 进行比较。

  CorrelId:消息相关标识,应用程序可使用它来将一个消息与另一个消息相关,或将一个消息与应用程序正在执行的其它工作相关,默认值全为空。在通常的做法中,发送请求消息的程序记录下请求消息的 MsgId,服务程序读到请求消息,拿出它的 MsgId 放到回复信息的 CorrelId 字段中,发送程序在 MQGET 得到回复消息前,先把记录的 MsgId 填到消息头的 CorrelId 中,这样它就能 GET 到那条特定的回复消息。CorrelId 也可以用来设计更复杂的消息传递/识别机制。

  BackoutCount:记载消息被回滚的次数。具体介绍参见有害的消息处理。

  ReplyToQ:这是回复消息队列的名称。本字段和下面的 ReplyToQMgr 一起,构成了消息返回目的地信息。通常消息请求程序在发送请求时,就填好这些字段,消息处理程序只简单地根据要求进行回复,通过这种方式实现动态的消息回送机制。

  Reply

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值