我有一个场景,其中多个进程(p1,p2等)同时向msg队列(cmd_msg_q)发送命令(post)。
还有一个接收进程(R1)从队列中检索msg并将相应的回复发送回另一个msg队列(response_msg_q)上的进程。
如何从接收者进程回复,以便将消息发送到特定进程?
(使用Posix消息队列。)这里动态创建进程A,B或C.最大限制是20个进程,可以发送命令。
答案 0 :(得分:1)
在这种情况下,您必须在邮件中集成一些发件人ID。另请注意,这些队列基本上是单向的,因此要发回消息,您需要创建一个初始接收者将发送的队列,并且初始发送者将侦听回复。
这比我最初的想法更难解释,所以让我们试试并举例说明。假设我们有程序A B和C,其中A和B发送给C.它们通过相同的队列进行。 C将知道谁发送了消息,因为发送者的标识嵌入在消息中,并将回复发布到B读取的队列或C读取的队列。
答案 1 :(得分:0)
POSIX消息队列几乎要求你为每个进程建立第二个队列,并且有一个很好的建立模式。
您的cmd_msg_q应该是已建立的,众所周知的队列(即路径名称)。系统可以在启动任何应用程序之前创建队列(例如启动脚本),或者接收进程可以在启动任何发送方进程之前创建它。
建立消息类型协议,最低限度:(1)打开输出队列; (2)过程信息; (3)关闭输出队列。每条消息都需要包含哪个发送方进程正在提交交易的指示,例如pid或一些唯一标识符。
发送方进程创建自己的队列(例如输入到它们并输出到接收"命令"进程。它们向接收方发送"打开队列"消息使用他们刚创建的队列的路径名。命令进程打开输出队列到接收者并确认建立通信。
"处理"消息类型被交换。命令进程从组合源队列中读取输入,并根据每条消息中的标识符回复相应的输出队列。
客户端(接收方)队列发送"关闭队列"消息类型完成后。命令进程发送一个ack并关闭该接收者队列。客户端处理确认并关闭它的队列。