Не удалось выбрать конкретного работника над потребительским тегом - PullRequest
0 голосов
/ 22 ноября 2018

Я определил работника следующим образом:

...    
$this->objChannel->basic_consume(
        'QueueDeclare',
        'orange', 
        false,                 
        false,
        false,
        false,
        [$this, 'ProcessClientRequest']
    );
    ...

Я установил «оранжевый» в качестве тега потребителя.

Есть другие работники с таким же объявлением «QueueDeclare». +, Но другой потребительtag.

Теперь я пытаюсь отправить задание этому конкретному работнику с «оранжевым» потребительским тегом.

...
$objMessage = new AMQPMessage(
    json_encode($arrWork),
    [
        'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT,
        'consumer_tag'  => 'organge',
    ]
);
...

Проблема в том, что когда я отправляю пару раз, RabbitMQ отправляет работу всем работникамНе только тому, у кого есть обычный потребительский ярлык.

Какова моя ситуация?У меня работает пара рабочих, которые создают большие файлы.Процесс заключается в том, что я отправляю, например, 500 строк как одну задачу, и пока я не закончу с заданием.

Из-за этого процесса для меня важно, чтобы я начинал с задания только одним работникомполучает этот конкретный файл.

Если работник с оранжевым потребительским тегом начинает с file_123, он должен выполнить весь процесс, он должен получить все строки.

Действительно ли потребительский тег создан для того или иногочто-то еще?

Я показал выше только код, который важен для этого объяснения.

Заранее спасибо

ОБНОВЛЕНИЕ 1:

В списке очередей я вижу, что у каждого работника / соединения есть customer_tag, а также в клиентских сообщениях.

ОБНОВЛЕНИЕ 2:

Или, возможно, я могу выбрать определенныйканал, когда есть пара из них с одинаковой очередью?

1 Ответ

0 голосов
/ 27 ноября 2018

Найденное решение (я уверен, что есть и другие решения, но это сработало для меня).

Для каждого работника определите два «QueueDeclare», одно будет одинаковым для всех работников, а другое случайным, дляпример uniqid ().

При первой отправке сообщения в обычный «QueueDeclare» и разрешите, если это было сообщением инициализации, если оно было сохранено где-то случайное имя, чтобы клиент мог получить его и отправить реальную работу над ним.После этого клиент может отправлять неограниченное количество сообщений тому же работнику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...