У меня есть очень простой код:
celery = Celery(broker="amqp://guest:[email protected]:5672/")
celery.send_task(
"robot.worker",
kwargs={},
exchange="I_am_useless", # with exchange=Exchange("I_am_useless") I got the same results
)
Мне очень нужно, чтобы задача была отправлена на биржу "I_am_useless", однако она туда не отправляется, при отладке на уровне протокола AMQP я вижу, что событие публикации отправляется (что нормально), но со следующей характеристикой
reserved-1': 0,
'exchange-name': '',
'routing-key': 'celery',
'mandatory': False,
'immediate': False
поэтому кажется, что параметр полностью игнорируется, так как даже во время объявления обмена используется имя «сельдерей». но согласно документации send_task
принимает те же параметры, что и https://docs.celeryproject.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.apply_async , и мы видим, что параметр «exchange», который должен принимать строку.
однако, если я позвоню комбу напрямую
rabbit_url = "amqp://guest:[email protected]:5672/"
conn = Connection(rabbit_url)
channel = conn.channel()
exchange = Exchange("example-exchange", type="direct")
producer = Producer(exchange=exchange, channel=channel, routing_key="BOB")
queue = Queue(name="example-queue", exchange=exchange, routing_key="BOB")
queue.maybe_bind(conn)
queue.declare()
producer.publish("Hello there!")
Я правильно вижу имя биржи, поэтому мне интересно, что я делаю неправильно?