我已经这样定义了工人:
...
$this->objChannel->basic_consume(
'QueueDeclare',
'orange',
false,
false,
false,
false,
[$this, 'ProcessClientRequest']
);
...
我已将“橙色”设置为消费者标签。
还有其他具有相同声明“ QueueDeclare”的工作程序,但具有不同的使用者标记。
现在,我正在尝试将工作发送给带有“橙色”消费者标签的特定工人。
...
$objMessage = new AMQPMessage(
json_encode($arrWork),
[
'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT,
'consumer_tag' => 'organge',
]
);
...
问题是当我几次发送RabbitMQ向所有工人发送工作时,而不仅仅是向带有有机消费者标签的那个人发送工作。
我的情况如何? 我有几个正在运行的工作人员正在创建大文件。 处理的方式是,我将500行作为一项任务发送,直到完成工作为止。
由于这个过程,当我开始工作时,只有一个工人会收到该特定文件对我来说很重要。
如果带有橙色消费者标签的工作程序以file_123开头,则它必须执行整个过程,并且必须接收所有行。
这真的是消费者标签吗?还是还有其他东西?
我上面仅显示了对于此解释很重要的代码。
提前谢谢
更新1:
我可以在队列列表中看到每个工作人员/连接都具有consumer_tag以及在客户端消息中。
更新2:
或者当有几个相同的队列时,我可以选择特定的频道吗?
答案 0 :(得分:0)
找到了解决方案(我确定还有其他解决方案,但这对我有用)。
为每个工作人员定义两个“ QueueDeclare”,一个对所有工作人员都相同,一个为随机变量,例如uniqid()。
在第一次将消息发送到公共“ QueueDeclare”并确定该消息是否为初始化消息,是否将其保存在随机名称中,以便客户端可以获取它并发送实际的工作。 之后,客户端可以向该工作人员发送无限的消息。