Rabbitmq 仅本地消息队列?

Rabbitmq 仅本地消息队列?,rabbitmq,celery,Rabbitmq,Celery,我在用芹菜配兔子 对于我的用例,我肯定会有一些实例,在这些实例中,应该在任何给定的节点上执行消息,但是对于一个特定的队列,我只需要在原始服务器上执行。这是因为它仅适用于本地文件: @celery.task def calculate_hash(filename): target = Models.objects.get(filename=filename) hasher = hashlib.md5() with open(filename, "rb") as f:

我在用芹菜配兔子

对于我的用例,我肯定会有一些实例,在这些实例中,应该在任何给定的节点上执行消息,但是对于一个特定的队列,我只需要在原始服务器上执行。这是因为它仅适用于本地文件:

@celery.task
def calculate_hash(filename):
    target = Models.objects.get(filename=filename)
    hasher = hashlib.md5()
    with open(filename, "rb") as f:
        chunk = f.read(64 * 1024)
        while len(chunk) > 0:
            hasher.update(chunk)
            chunk = f.read(64 * 1024)
    target.hash = hasher.hexdigest()
    target.save()
显然,上述任务仅与实际存在的
filename
相关,并且不可能同时存在于多个节点上


有没有办法指定只在本地执行给定的任务?

基本上,如果我正确理解您的问题,您应该让一个特定的工作人员从一个特定的队列中读取

首先,您可以将队列配置为在
celeryd
级别上使用,例如,使用
--queues
选项启动队列:

celeryd --queues=celery,queue1.mydomain.com
然后,要将任务发送到特定队列,可以通过设置
queue
参数来使用

另见:

希望有帮助