我想使用用java nio编写的彗星服务器来发送实时更新 . 接收信息时,我希望它扫描数据,并通过rabbitmq将任务发送到工作线程 . 理想情况下,我希望芹菜服务器位于兔子的另一端,管理将处理这些任务的工作线程池 .
然而,根据我的理解,芹菜通过坐在rabbitmq的两端来工作,它通过嵌入到消费者和 生产环境 者的代码中而基本上接管了 生产环境 者和消费者的角色 . 有没有办法像我上面描述的那样设置芹菜?谢谢
没有必要使用Celery发布消息 . 您可以从自己的应用程序向RabbitMQ或其他代理发布消息,并使用Celery来使用任务 .
Celery使用简单的消息protocol . 您可以在应用程序中实现客户端 .
如果您不想实现协议的客户端,您可以实现一个简单的http服务器,它接受请求并进行适当的调用 . 喜欢this .
是的,cource!
您可以将 Custom Message Consumers 添加到芹菜应用程序中 .
Custom Message Consumers
请参考芹菜文件中的Extensions and Bootsteps .
以下是上述链接中示例代码的一部分:
from celery import Celery from celery import bootsteps from kombu import Consumer, Exchange, Queue my_queue = Queue('custom', Exchange('custom'), 'routing_key') app = Celery(broker='amqp://') class MyConsumerStep(bootsteps.ConsumerStep): def get_consumers(self, channel): return [Consumer(channel, queues=[my_queue], callbacks=[self.handle_message], accept=['json'])] def handle_message(self, body, message): print('Received message: {0!r}'.format(body)) message.ack() app.steps['consumer'].add(MyConsumerStep)
测试一下:
python -m芹菜 - 主要工作者
另见:Using Celery with existing RabbitMQ messages
2 回答
没有必要使用Celery发布消息 . 您可以从自己的应用程序向RabbitMQ或其他代理发布消息,并使用Celery来使用任务 .
Celery使用简单的消息protocol . 您可以在应用程序中实现客户端 .
如果您不想实现协议的客户端,您可以实现一个简单的http服务器,它接受请求并进行适当的调用 . 喜欢this .
是的,cource!
您可以将
Custom Message Consumers
添加到芹菜应用程序中 .请参考芹菜文件中的Extensions and Bootsteps .
以下是上述链接中示例代码的一部分:
测试一下:
另见:Using Celery with existing RabbitMQ messages