在芹菜rabbitmq交换类型主题不能正常工作

时间:2016-06-03 05:51:53

标签: python rabbitmq celery amqp

我有两个python项目。两者都是芹菜。我在这里尝试做的是从项目A我使用send_task()方法发送任务。我发送的任务是在项目B中。因此项目B的工作人员正在启动并显示任务。直到这个条件一切正常。但是当我让项目A的工作人员开始在这里提供关键错误时。这里究竟发生了什么 1)在第一次尝试send_task()时,项目B的工作人员正在接收任务。一切都按预期工作。 2)在send_task()的第二次尝试中,它失败了。因为项目A的工作人员正在尝试接收项目A中不存在的任务,因此其抛出键错误。 3)在send_task()的第三次尝试中,项目B的工作人员正在接收任务。一切都按预期工作。 4)在send_task()的第四次尝试中,它失败了。因为项目A的工作人员正在尝试接收项目A中不存在的任务,因此其抛出键错误。 这个过程一再重复。

项目A队列: -

                .> mplogin.sync     exchange=mplogin(topic) key=mplogin.sync


[tasks]


[2016-06-03 11:11:04,427: INFO/MainProcess] Connected to amqp://guest:**@localhost:5672//
[2016-06-03 11:11:04,468: INFO/MainProcess] mingle: searching for neighbors
[2016-06-03 11:11:05,476: INFO/MainProcess] mingle: all alone
[2016-06-03 11:11:05,984: WARNING/MainProcess] celery@gaurav-All-Series ready.

项目B队列: -

                .> mplogin.sync     exchange=mplogin(topic) key=mplogin.sync


[tasks]
  . mplogin.sync.register

[2016-06-03 11:12:57,941: INFO/MainProcess] Connected to amqp://guest:**@localhost:5672//
[2016-06-03 11:12:57,949: INFO/MainProcess] mingle: searching for neighbors
[2016-06-03 11:12:58,955: INFO/MainProcess] mingle: all alone
[2016-06-03 11:12:58,980: WARNING/MainProcess] /usr/local/lib/python2.7/dist-packages/kombu/pidbox.py:75: UserWarning: A node named celery@gaurav-All-Series is already using this process mailbox!

Maybe you forgot to shutdown the other node or did not do so properly?
Or if you meant to start multiple nodes on the same host please make sure
you give each node a unique node name!

  warnings.warn(W_PIDBOX_IN_USE.format(node=self))
[2016-06-03 11:12:58,983: WARNING/MainProcess] celery@gaurav-All-Series ready.

我正在使用

让两个工人都工作
celery -A tasks worker -l info
项目B中的

任务: -

@sync_app.task(name='mplogin.sync.register')
def register(user_obj):
    return "Its working!!!!"

从项目A发送任务:

    from tasks import login_async_app

    abc = login_async_app.send_task('mplogin.sync.register',kwargs={'user_obj': 500})

sync_app是项目B&中的芹菜应用程序。 login_async_app是项目A中的芹菜应用程序。

我认为我面临的问题是因为exchange_type =" topic" 我尝试使用直接但不起作用。 请指导我完成这个。

1 个答案:

答案 0 :(得分:0)

两个工作人员正在从同一队列中消耗任务。

当您启动工作人员A时,它无法识别任何任务(从日志中看到)。

[tasks]

工人B只识别了一项任务。

[tasks]
  . mplogin.sync.register

您必须确保两名工作人员都能识别这两项任务。你可以通过正确配置芹菜来做到这一点。

您还可以使用CELERY_IMPORTS来提及芹菜进口的模块列表。

CELERY_IMPORTS = ('foo.bar.app1.task1', 'foo.bar.app2.task2')

通过正确导入任务,您可以避免该错误。