2016-12-27 7 views
0

я следующая схема моей тяжелой задачей, которая запускается в c1, c2, c3 .. потребители (потребляя первой очереди - очереди задач)RabbitMQ: Потребитель становится производителем - соединение закрыто ошибка

enter image description here

Когда задача в c1 или c2 или c3 завершается, она создает другое соединение и канал в обратном вызове для создания другого cb_q. Я получаю сообщение «Connection Closed» после того, как мой потребитель производит задание. Однако я не закрываю связь своего потребителя, но я закрываю связь производителя. Объекты разные ..

Вопрос:

  • Должен ли я создать еще одно соединение и канал в Task Consumer обратный вызов, чтобы произвести задачу cb_q?

  • Каковы лучшие практики, когда потребитель становится производителем?

ответ

0

У меня есть подобный набор мер, где у меня есть «рабочий», который потребляет из одной очереди, обрабатывает данные и помещает результат на другой очереди

Я в настоящее время есть все очереди, живущих на такой же машиной, поэтому я просто повторно использую соединение/канал, который у меня есть для этой машины, и использую обмен по умолчанию, просто указывая имя очереди

Так что для того, чтобы использовать мои экземпляры c1/c2/c3, звоните:

channel.basic_consume(your_callback_function, queue=e1) 

И для толкания к следующей очереди, используя один и тот же канал, они называют:

channel.basic_publish(exchange='', 
        routing_key=cb_q, 
        properties=pika.BasicProperties(...), 
        body=message 
        ) 

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

Смежные вопросы