无法根据消费者标签选择特定的工作人员

时间:2018-11-22 17:24:44

标签: rabbitmq

我已经这样定义了工人:

...    
$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:

或者当有几个相同的队列时,我可以选择特定的频道吗?

1 个答案:

答案 0 :(得分:0)

找到了解决方案(我确定还有其他解决方案,但这对我有用)。

为每个工作人员定义两个“ QueueDeclare”,一个对所有工作人员都相同,一个为随机变量,例如uniqid()。

在第一次将消息发送到公共“ QueueDeclare”并确定该消息是否为初始化消息,是否将其保存在随机名称中,以便客户端可以获取它并发送实际的工作。 之后,客户端可以向该工作人员发送无限的消息。