向芹菜中的特定消费者发送消息(通过路由密钥)

时间:2019-09-19 03:27:34

标签: python rabbitmq celery amqp

是否Celery支持将消息专门发送给特定的消费者/客户,例如通过路由键?

默认情况下RabbitMQ,一台机器可以使用直接队列作为目标,但我正在尝试使用Celery实现相同的行为

@app.task
def add(x, y):
    return x + y


# something like this
add.delay(1, 2, "machine-xyz")

2 个答案:

答案 0 :(得分:2)

您可以将worker-xyz作为-Q worker-abc-queue运行,以使其侦听特定队列,然后在调用任务进行路由时指定此队列名称

add.apply_async((1, 2), {}, queue='worker-abc-queue')

答案 1 :(得分:0)

另一种方法是在 Celery queue 装饰器中设置 app.task 参数,如果没有必要在您的情况下以编程方式路由每条消息,这会很方便。

@app.task(queue='YOUR_QUEUE_NAME')
def add(x, y):
    return x + y

# so you don't need to specify queue or routing key every time when your code invokes it.
add.delay(1, 2)