system/q部件是tuxedo系統的乙個重要組成部分,它提供了一種佇列機制,允許訊息按某種排隊規則儲存到持續介質(如磁碟)或非持續介質(如記憶體)中,然後再**給其它處理程序。這種儲存**機制可以保證在兩個通訊實體之間傳遞的訊息不丟失、不重傳,從而保證交易的完整性。
system/q的佇列通訊
system /q用到了tuxedo系統提供的兩個伺服器:訊息佇列伺服器tmqeue和訊息**伺服器tmqforward。tmqeue用於對訊息進行出隊入隊管理,tmqforward用於將訊息從佇列中取出,**給伺服器進行處理,然後將處理結果放回響應佇列。
圖1system/q的佇列通訊可以分為兩類:客戶機對客戶機和客戶機對伺服器,差別在於前者訊息不需要**,而後者需要將訊息**到伺服器請求服務處理。因此,對於前者,配置檔案中就不用提供**伺服器tmqforward。
客戶機對客戶機的通訊
這種端對端的通訊模式是佇列系統的簡單應用,圖1是端對端非同步通訊模式的展示。左側客戶機通過tpenqueue()函式往佇列裡寫了一條訊息,然後接著做下面的工作;右側客戶機通過tpdequeue()函式接收訊息,並進行處理,之後再往佇列中寫訊息;左側客戶機從佇列中取出訊息;至此,乙個通訊週期完成。
若使用同步通訊,左側客戶往佇列中寫入訊息後,就處於阻塞狀態,只有等到取得右側客戶機的響應訊息後,流程才繼續往下執行。
客戶機對伺服器的通訊
這種通訊模式是system/q的常規應用,下面是客戶機和伺服器的通訊流程:
圖2圖2中左側為客戶機,右側為伺服器,中間為訊息佇列系統。右側伺服器提供了兩個服務:service1和service2。在訊息佇列系統中,tms_qm是system/q的事務管理伺服器,它定義了乙個佇列伺服器組,組中定義了乙個佇列空間,佇列空間中定義了有四個訊息佇列,service1和service2分別是對應於同名的兩個服務的佇列(這是一種習慣的命名規則,客戶機若請求伺服器中的service1服務,就把請求訊息放入service1佇列中)。client_rply1是service1服務對請求的響應佇列,failureq是伺服器操作失敗的響應佇列。圖中流程說明:①客戶機提出對service1的請求;②tmqueue將請求訊息入隊;③tmqueue向客戶機匯報入隊是否成功;④tmqforward取出請求訊息;⑤將請求訊息傳給service1;⑥service1對請求作出響應;⑦tmqforward將響應訊息入隊;⑧客戶機要求取回響應訊息;⑨tmqueue取出響應訊息;⑩tmqueue取訊息是否成功。
佇列管理
在使用system/q部件之前,需要先建立佇列空間和佇列。tuxedo對佇列的操作和管理基本上是通過qmadmin來完成的,在nt下,qmadmin是乙個dos應用程式,執行前,先要設定環境變數qmconfig,如:
set qmconfig=c:\qsample\que
qmadmin通過這個變數決定在c:\qsample目錄下建立佇列裝置que。執行qmadmin,出現乙個操作環境,按照如下命令依次建立佇列裝置、佇列空間和訊息佇列:
> crdl c:\qsample\que 0 400
… …> qspacecreate -n 100b
queue space name: qspace
ipc key for queue space: 62839
size of queue space in disk pages: 100
number of queues in queue space: 6
…> qopen qspace
> qcreate
queue name: string
queue order (priority, time, expiration, fifo, lifo): fifo
crdl命令建立了乙個佇列裝置,名為que,大小為400個磁碟塊;接著用qspacecreate命令建立了乙個佇列空間,名為qspace,大小為100個磁碟塊;最後用qcreate命令在qspace中建立了乙個名為string的佇列,它使用了先進先出(fifo)的排隊規則。為了完成本文中介紹的例子,還必須建立另外兩個佇列:rplyq和errque。
system/q的應用例項
BEA TUXEDO訊息佇列詳解
system q部件是tuxedo系統的乙個重要組成部分,它提供了一種佇列機制,允許訊息按某種排隊規則儲存到持續介質 如磁碟 或非持續介質 如記憶體 中,然後再 給其它處理程序。這種儲存 機制可以保證在兩個通訊實體之間傳遞的訊息不丟失 不重傳,從而保證交易的完整性。system q的佇列通訊 sys...
訊息佇列 訊息佇列
輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...
訊息佇列 訊息佇列 kafka
kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...