- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
mq 企业级方案设计,第 3 部分:企业级应用设计构架
细看 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 一起,构成了消息返回目的地信息。通常消息请求程序在发送请求时,就填好这些字段,消息处理程序只简单地根据要求进行回复,通过这种方式实现动态的消息回送机制。ReplyToQMgr:这是回复消息队列所在队列管理器的名称,其默认值全为空,表示返回消息时到本地队列
文档评论(0)