




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Websphere MQ設(shè)計篇 第十九章 消息上下文 (Message Context)第十九章 消息上下文 (Message Context) 一般說來,任意兩條消息之間的屬性是獨(dú)立無關(guān)的,每條消息都有各自的屬性。比如,在缺省情況下,隊列中的一條消息被 MQGET 取出來,然后又原封不動地 MQPUT 放回去。雖然在內(nèi)容上沒有任何地改動,然而在一進(jìn)一出之后,就變成了兩條消息。嚴(yán)格地說,放回去的消息已經(jīng)不是原先在隊列中的那條消息了,它們可以有各自的屬性,從后一條消息中是看不出前一條消息的痕跡的。 MQPUT 這么一個環(huán)節(jié)之后就“脫胎換骨”成 缺省情況下,消息在經(jīng)歷了 MQGET 和了另一條消息,下一個環(huán)節(jié)只能知道消息的來源是上一個環(huán)節(jié),而無法知道消息是由上一個環(huán)節(jié)產(chǎn)生,還是由上一個環(huán)節(jié)轉(zhuǎn)發(fā),更無法知道上一個環(huán)節(jié)之前的發(fā)送者。(如圖) 這樣消息鏈中的每一個環(huán)節(jié)只能對上一環(huán)節(jié)對安全檢查和權(quán)限認(rèn)證,從而決定是否讓消息通過,缺乏能在消息鏈全程中發(fā)揮作用的安全機(jī)制。消息鏈的末端也只能看見最后一個環(huán)節(jié),根本無法知曉消息的始作俑者,從而給末端授權(quán)或末端計費(fèi)的應(yīng)用帶來一定的困難。 abc abc abc abc 1 2 3 4 圖 有時候,在實(shí)際的應(yīng)用場景中需要消息的某些屬性能夠經(jīng)歷多次傳遞而不變。這就意味著某些消息屬性能夠跨越一個環(huán)節(jié),被自動復(fù)制到新的相關(guān)消息中去,從而被一環(huán)一環(huán)地傳遞下去,直到消息鏈的終點(diǎn)。(如圖) 終點(diǎn)的接收程序可以通過這些屬性知道消息鏈起始端的發(fā)送程序想要傳遞的某些信息,這些可以被自動地復(fù)制傳遞而貫串始終的消息屬性就是所謂的消息上下文 (Message Text)。 abc abc A A 圖 消息上下文指的是消息描述符 (MQMD) 中的 8 個字段,分兩類:身份上下文 (Identity Context) 和 起源上下文 (Origin Context)。其中身份上下文指的是 MQPUT 或 MQPUT1 時發(fā)送程序的用戶信息,通常存放消息鏈中最初的發(fā)送程序的用戶信息;起源上下文指的是 MQPUT 或 MQPUT1 時發(fā)送程序自身的信息,通常存放上一個環(huán)節(jié)中 MQPUT 程序的信息??梢?,如果傳遞身份上下文,則可以傳遞用戶信息,如果傳遞起源上下文,則可以傳遞程序信息。 消息上下文的內(nèi)容 事實(shí)上,WebSphere MQ 允許兩種方式傳遞上下文:一種方式是只傳遞身份上下文,另一種方式是傳遞全部上下文,包括身份上下文和起源上下文。(見下表) Identity Context UserIdentifier MQPUT程序的用戶名。根據(jù)平臺環(huán)境的不同而有不同的解釋。 AccountingToken 應(yīng)用程序標(biāo)識或數(shù)字。通常用來對最初的發(fā)送程序計費(fèi)。對于,Windows 平臺,存放的是用戶的 SID (Security Identifier), 這可以作為 UserIdentifier 的一個補(bǔ)充。 ApplIdentityData 可以用來傳遞輔助的用戶信息,比如加了密的口令等等。 Origin Context PutApplType 應(yīng)用程序的類型,例: CICS 交易 PutApplName 應(yīng)用程序的名字,例: 交易名或作業(yè)名 PutDate 消息生成日期,GMT 格林威治時間 PutTime 消息生成時間,GMT 格林威治時間 ApplOriginData 起源消息數(shù)據(jù) 表 由于消息上下文具有貫串消息鏈的功能,所以通常用來: , 對消息源的發(fā)送者進(jìn)行權(quán)限檢查 , 對消息源的發(fā)送者進(jìn)行服務(wù)計費(fèi) , 對消息鏈全程記錄 消息上下文的編程 要設(shè)置消息上下文是需要有相應(yīng)的權(quán)限的。在使用時,如果應(yīng)用程序是消息源,則應(yīng)該設(shè)置 (SET) 身份上下文和起源上下文。如果應(yīng)用程序是中間環(huán)節(jié),未改變消息內(nèi)容,則應(yīng)該傳遞 (PASS) 身份上下文,也可以傳遞起源上下文。如果應(yīng)用程序是中間環(huán)節(jié),且改變了消息內(nèi)容,則應(yīng)該設(shè)置新的起源上下文。當(dāng)然,這只是對編程的指導(dǎo)意見,編程本身并不限制對各種上下文域的設(shè)置和傳遞,你甚至可以用拷貝上下文內(nèi)容的辦法來設(shè)置上下文,效果看上去就像是傳遞上下文一樣。應(yīng)用程序?qū)ο⑸舷挛牡牟僮魇峭ㄟ^ MQPUT 或 MQPUT1 中的 Options 域來完成的。如果不設(shè)置此域,則隊列管理器會自動設(shè)置所有的消息上下文,如同使用 MQPMO_NO_CONTEXT。 在編程時可以用 MQPMO.Options 來設(shè)置或傳遞相應(yīng)的上下文: , MQPMO_SET_ IDENTITY_CONTEXT , MQPMO_SET_ALL_CONTEXT , MQPMO_PASS_IDENTITY_CONTEXT , MQPMO_PASS_ALL_CONTEXT 如果不設(shè)定合適的 Options,則相應(yīng)的上下文域由隊列管理器自動設(shè)置。這時,這些域?qū)τ?MQPUT 或 MQPUT1 來說,就只是輸出域。 設(shè)置身份上下文 (Set Identity Context) , 當(dāng) MQOPEN 隊列打算寫消息的時候,用 MQOO_SET_IDENTITY_CONTEXT 選項(xiàng) MQPUT 時,MQPMO.Options 中設(shè)置 MQPMO_SET_IDENTITY_CONTEXT , 當(dāng), 根據(jù)需要,設(shè)置 MQMD 中的 UserIdentifier, AccountingToken, ApplIdentityData 域 設(shè)置所有上下文 (Set All Context) , 當(dāng) MQOPEN 隊列打算寫消息的時候,用 MQOO_SET_ALL_CONTEXT 選項(xiàng) , 當(dāng) MQPUT 時,MQPMO.Options 中設(shè)置 MQPMO_SET_ALL_CONTEXT UserIdentifier, AccountingToken, ApplIdentityData 域, 根據(jù)需要,設(shè)置MQMD 中的以及 PutApplType, PutApplName, PutDate, PutTime, ApplOriginData 域 傳遞身份上下文 (Pass Identity Context) , 在 MQOPEN 隊列打算讀消息的時候,用 MQOO_SAVE_ALL_CONTEXT 選項(xiàng),以后讀到的消息會保存它的 Context (注意,對瀏覽程序,不可以用這一選項(xiàng),也就是說,MQOO_SAVE_ALL_CONTEXT 和 MQOO_BROWSE 不能共用) , 當(dāng) MQOPEN 隊列打算寫消息的時候,用 MQOO_PASS_IDENTITY_CONTEXT 選項(xiàng) , 當(dāng) MQPUT 時,在 MQMD.Context 中設(shè)置讀隊列的句柄 (保存了上下文的那一個隊列),MQPMO.Options 中設(shè)置 MQPMO_PASS_IDENTITY_CONTEXT 傳遞所有上下文 (Pass All Context) , 在 MQOPEN 隊列打算讀消息的時候,用 MQOO_SAVE_ALL_CONTEXT 選項(xiàng),以后讀到的消息會保存它的 Context (注意,對瀏覽程序,不可以用這一選項(xiàng),也就是說,MQOO_SAVE_ALL_CONTEXT 和 MQOO_BROWSE 不能共用) , 當(dāng) MQOPEN 隊列打算寫消息的時候,用 MQOO_PASS_ALL_CONTEXT 選項(xiàng) , 當(dāng) MQPUT 時,在 MQMD.Context 中設(shè)置讀隊列的句柄 (保存了上下文的那一個隊列),MQPMO.Options 中設(shè)置 MQPMO_PASS_ALL_CONTEXT 例程 具體程序參見 MQGetContext.c,MQSetContext.c,MQPassContext.c。這里是 MQPassContext.c 的程序摘要。 mqlOption = MQOO_INPUT_SHARED + MQOO_FAIL_IF_QUIESCING + MQOO_SAVE_ALL_CONTEXT; MQOPEN (mqhConn, / Connection Handle & mqod, / Object Descriptor for Q mqlOption, / MQOPEN Options & mqhReq, / Request Handle & mqlCompletionCode, / Completion Code & mqlReasonCode); / Reason Code strcpy (mqod.ObjectName, szQRepName); mqlOption = MQOO_OUTPUT + MQOO_FAIL_IF_QUIESCING; if (mqlContextType = IDENTITY_CONTEXT) mqlOption += MQOO_PASS_IDENTITY_CONTEXT; else mqlOption += MQOO_PASS_ALL_CONTEXT; MQOPEN (mqhConn, / Connection Handle & mqod, / Object Descriptor for Q mqlOption, / MQOPEN Options & mqhRep, / Reply Handle & mqlCompletionCode, / Completion Code & mqlReasonCode); / Reason Code mqgmo.Version = MQGMO_VERSION_2; mqgmo.MatchOptions = MQMO_NONE; mqgmo.Options = MQGMO_WAIT + MQGMO_CONVERT + MQGMO_ACCEPT_TRUNCATED_MSG; mqgmo.WaitInterval = 2000; / milli-seconds memcpy (mqmd.MsgId, MQMI_NONE, sizeof (mqmd.MsgId); memcpy (mqmd.CorrelId, MQCI_NONE, sizeof (mqmd.CorrelId); mqmd.Encoding = MQENC_NATIVE; mqmd.CodedCharSetId = MQCCSI_Q_MGR; mqlBufferLength = sizeof (mqbMessageBuffer) - 1; MQGET (mqhConn, / Connection Handle mqhReq, / Object Handle & mqmd, / Message Descriptor & mqgmo, / Get Message Options mqlBufferLength, / Buffer Length mqbMessageBuffer, / Message Buffer & mqlMessageLength, / Message Length & mqlCompletionCode, / Completion Code & mqlReasonCode); / Reason Code mqbMessageBuffer mqlMessageLength = 0; printf (Message %d: %sn, i, mqbMessageBuffer); if (mqlContextType = IDENTITY_CONTEXT) mqpmo.Options += MQPMO_PASS_IDENTITY_CONTEXT; else mqpmo.Options += MQPMO_PASS_ALL_CONTEXT; mqpmo.Context = mqhReq; MQPUT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保產(chǎn)業(yè)園區(qū)的產(chǎn)業(yè)集聚與區(qū)域綠色產(chǎn)業(yè)融合協(xié)同發(fā)展報告
- 保育員實(shí)操考試題目及答案
- 安全專題試題及答案
- 影視行業(yè)高質(zhì)量制作指南:2025年工業(yè)化流程與質(zhì)量控制深度分析報告
- 農(nóng)業(yè)溫室智能化改造可行性研究報告
- 2025年廢棄礦井資源再利用與礦山安全生產(chǎn)技術(shù)革新報告
- 安全生產(chǎn)試題及答案文本
- 安全工作競聘試題及答案
- 2025年家庭教育指導(dǎo)行業(yè)市場細(xì)分領(lǐng)域競爭格局研究報告
- 農(nóng)產(chǎn)品質(zhì)量安全追溯體系在農(nóng)產(chǎn)品生產(chǎn)環(huán)節(jié)中的應(yīng)用與實(shí)踐研究報告
- 半導(dǎo)體材料(總結(jié))
- 沃爾瑪收貨規(guī)定
- 微生物實(shí)驗(yàn)實(shí)驗(yàn)一顯微鏡的使用及微生物形態(tài)觀察
- 屠宰場安全隱患排查和治理制度
- 2022年丹東市元寶區(qū)社區(qū)工作者招聘筆試題庫及答案解析
- 小學(xué)道德與法治人教五年級上冊(統(tǒng)編)第三單元我們的國土我們的家園-愛國教案
- 藝術(shù)欣賞完整版課件全套ppt教程(最新)
- GB∕T 2518-2019 連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
- 土地項(xiàng)目測算表_模板
- 教育培訓(xùn)機(jī)構(gòu)輔導(dǎo)老師月度績效考核表(KPI)
- 立式水輪機(jī)組軸線調(diào)整及導(dǎo)軸承的間隙分配ppt課件
評論
0/150
提交評論