Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将芹菜与现有RabbitMQ消息一起使用_Python_Rabbitmq_Celery - Fatal编程技术网

Python 将芹菜与现有RabbitMQ消息一起使用

Python 将芹菜与现有RabbitMQ消息一起使用,python,rabbitmq,celery,Python,Rabbitmq,Celery,我有一个现有的RabbitMQ部署,一些Java应用程序正在使用发送日志消息作为各种通道上的字符串JSON对象。我想使用芹菜来消费这些消息,并将它们写到不同的地方(例如DB、Hadoop等) 我可以看到芹菜被设计成RabbitMQ消息的生产者和消费者,因为它试图隐藏传递这些消息的机制。还有什么方法可以让芹菜使用另一个应用程序创建的消息并在它们到达时运行作业吗?目前很难将自定义消费者添加到芹菜工人中,但在开发版本(将成为3.1版)中,我添加了对消费者引导步骤的支持 由于我刚刚完成实现,还没有文档,

我有一个现有的RabbitMQ部署,一些Java应用程序正在使用发送日志消息作为各种通道上的字符串JSON对象。我想使用芹菜来消费这些消息,并将它们写到不同的地方(例如DB、Hadoop等)


我可以看到芹菜被设计成RabbitMQ消息的生产者和消费者,因为它试图隐藏传递这些消息的机制。还有什么方法可以让芹菜使用另一个应用程序创建的消息并在它们到达时运行作业吗?

目前很难将自定义消费者添加到芹菜工人中,但在开发版本(将成为3.1版)中,我添加了对消费者引导步骤的支持

由于我刚刚完成实现,还没有文档,但这里有一个示例:

from celery import Celery
from celery.bin import Option
from celery.bootsteps import ConsumerStep
from kombu import Consumer, Exchange, Queue

class CustomConsumer(ConsumerStep):
   queue = Queue('custom', Exchange('custom'), routing_key='custom')

   def __init__(self, c, enable_custom_consumer=False, **kwargs):
       self.enable = self.enable_custom_consumer

   def get_consumers(self, connection):
       return [
           Consumer(connection.channel(),
               queues=[self.queue],
               callbacks=[self.on_message]),
       ]

   def on_message(self, body, message):
       print('GOT MESSAGE: %r' % (body, ))
       message.ack()


celery = Celery(broker='amqp://localhost//')
celery.steps['consumer'].add(CustomConsumer)
celery.user_options['worker'].add(
    Option('--enable-custom-consumer', action='store_true',
           help='Enable our custom consumer.'),
)
请注意,API在最终版本中可能会更改,有一件事我还不确定 about是在
获取消费者(连接)
后如何处理频道。 当前,当连接断开时,耗电元件的通道关闭,并且在关机时, 但人们可能希望手动处理频道。在这种情况下,总是有可能的
自定义ConsumerStep或编写新的StartStopStep。

现在可以在