欢迎来到天天文库
浏览记录
ID:14697453
大小:32.00 KB
页数:8页
时间:2018-07-30
《websphere mq设计篇 第十九章 消息上下文 (message context)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、WebsphereMQ设计篇第十九章消息上下文(MessageContext)第十九章消息上下文(MessageContext)一般说来,任意两条消息之间的属性是独立无关的,每条消息都有各自的属性。比如,在缺省情况下,队列中的一条消息被MQGET取出来,然后又原封不动地MQPUT放回去。虽然在内容上没有任何地改动,然而在一进一出之后,就变成了两条消息。严格地说,放回去的消息已经不是原先在队列中的那条消息了,它们可以有各自的属性,从后一条消息中是看不出前一条消息的痕迹的。MQPUT这么一个环节之后就“脱胎换骨”成缺省情况下,消息在经历了MQGET和了另一条消息,下一个环节只
2、能知道消息的来源是上一个环节,而无法知道消息是由上一个环节产生,还是由上一个环节转发,更无法知道上一个环节之前的发送者。(如图)这样消息链中的每一个环节只能对上一环节对安全检查和权限认证,从而决定是否让消息通过,缺乏能在消息链全程中发挥作用的安全机制。消息链的末端也只能看见最后一个环节,根本无法知晓消息的始作俑者,从而给末端授权或末端计费的应用带来一定的困难。abcabcabcabc1234图有时候,在实际的应用场景中需要消息的某些属性能够经历多次传递而不变。这就意味着某些消息属性能够跨越一个环节,被自动复制到新的相关消息中去,从而被一环一环地传递下去,直到消息链的终点。
3、(如图)终点的接收程序可以通过这些属性知道消息链起始端的发送程序想要传递的某些信息,这些可以被自动地复制传递而贯串始终的消息属性就是所谓的消息上下文(MessageText)。abcabcAA图消息上下文指的是消息描述符(MQMD)中的8个字段,分两类:身份上下文(IdentityContext)和起源上下文(OriginContext)。其中身份上下文指的是MQPUT或MQPUT1时发送程序的用户信息,通常存放消息链中最初的发送程序的用户信息;起源上下文指的是MQPUT或MQPUT1时发送程序自身的信息,通常存放上一个环节中MQPUT程序的信息。可见,如果传递身份上下文
4、,则可以传递用户信息,如果传递起源上下文,则可以传递程序信息。消息上下文的内容事实上,WebSphereMQ允许两种方式传递上下文:一种方式是只传递身份上下文,另一种方式是传递全部上下文,包括身份上下文和起源上下文。(见下表)IdentityContextUserIdentifierMQPUT程序的用户名。根据平台环境的不同而有不同的解释。AccountingToken应用程序标识或数字。通常用来对最初的发送程序计费。对于,Windows平台,存放的是用户的SID(SecurityIdentifier),这可以作为UserIdentifier的一个补充。ApplIdent
5、ityData可以用来传递辅助的用户信息,比如加了密的口令等等。OriginContextPutApplType应用程序的类型,例:CICS交易PutApplName应用程序的名字,例:交易名或作业名PutDate消息生成日期,GMT格林威治时间PutTime消息生成时间,GMT格林威治时间ApplOriginData起源消息数据表由于消息上下文具有贯串消息链的功能,所以通常用来:,对消息源的发送者进行权限检查,对消息源的发送者进行服务计费,对消息链全程记录消息上下文的编程要设置消息上下文是需要有相应的权限的。在使用时,如果应用程序是消息源,则应该设置(SET)身份上下文
6、和起源上下文。如果应用程序是中间环节,未改变消息内容,则应该传递(PASS)身份上下文,也可以传递起源上下文。如果应用程序是中间环节,且改变了消息内容,则应该设置新的起源上下文。当然,这只是对编程的指导意见,编程本身并不限制对各种上下文域的设置和传递,你甚至可以用拷贝上下文内容的办法来设置上下文,效果看上去就像是传递上下文一样。应用程序对消息上下文的操作是通过MQPUT或MQPUT1中的Options域来完成的。如果不设置此域,则队列管理器会自动设置所有的消息上下文,如同使用MQPMO_NO_CONTEXT。在编程时可以用MQPMO.Options来设置或传递相应的上下文
7、:,MQPMO_SET_IDENTITY_CONTEXT,MQPMO_SET_ALL_CONTEXT,MQPMO_PASS_IDENTITY_CONTEXT,MQPMO_PASS_ALL_CONTEXT如果不设定合适的Options,则相应的上下文域由队列管理器自动设置。这时,这些域对于MQPUT或MQPUT1来说,就只是输出域。设置身份上下文(SetIdentityContext),当MQOPEN队列打算写消息的时候,用MQOO_SET_IDENTITY_CONTEXT选项MQPUT时,MQPMO.Options中设置MQP
此文档下载收益归作者所有