簡體   English   中英

消息隊列-多個進程在msgqueue上發送cmd

[英]Message Queue - Multiple processes send cmd on a msgqueue

我有一個場景,其中多個進程(p1,p2等)同時向msg Queue(cmd_msg_q)發送命令(發布)。

並且有一個接收器進程(R1),它從隊列中檢索msg並將適當的答復發送回另一個msg隊列(response_msg_q)上的進程。

如何從接收方進程回復,以便將消息發送到該特定進程?

(使用Posix消息隊列。)在這里,進程A,B或C是動態創建的。 最多可以發送20個進程。

在這種情況下,您必須在郵件中集成發件人的某些ID。 還要注意,這些隊列本質上是單向的,因此要向后發送消息,您需要創建一個隊列,初始接收者將在該隊列上發送,初始發送者將偵聽答復。

這比我最初想象的要難解釋,所以讓我們嘗試和示例。 假設我們有程序AB和C,其中A和B通過相同的隊列發送給C。 C將知道誰發送了該消息,因為發件人的身份已嵌入消息中,並將回復發送到B讀取的隊列或C讀取的隊列。

POSIX消息隊列非常需要您為每個進程建立第二個隊列,並且為此建立了一個很好的模式。

  • 您的cmd_msg_q應該是一個已建立的知名隊列(即路徑名)。 系統可以在啟動任何應用程序之前創建隊列(例如啟動腳本),或者接收進程可以在啟動任何發送程序進程之前創建隊列。

  • 建立消息類型的協議,最少:(1)打開輸出隊列; (2)處理消息; (3)關閉輸出隊列。 每個消息將需要包含哪個發送方進程正在提交事務的指示,例如pid或某些唯一標識符。

  • 發送方進程創建自己的隊列(例如,輸入隊列並輸出到接收“命令”進程。它們將“打開隊列”消息以及剛剛創建的隊列的路徑名發送給接收方。命令進程將打開隊列)。將隊列輸出到接收器並確認已建立通信。

  • 交換“過程”消息類型。 命令過程從組合的源隊列中讀取輸入,並基於每個消息中的標識符來答復適當的輸出隊列。

  • 客戶端(接收方)隊列完成后將發送“關閉隊列”消息類型。 命令進程發送一個ack並關閉該接收者隊列。 客戶端處理確認並關閉其隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM