2012-08-15 59 views
3

我想用java nio编写的comet服务器发送实时更新。当我收到我希望它扫描数据的信息,并通过rabbitmq将任务发送给工作线程时。理想情况下,我希望芹菜服务器坐在兔子的另一端,管理一组工作线程来处理这些任务。芹菜工作者/服务器可以接受来自非芹菜生产者的任务吗?

不过,从我的理解,芹菜作品坐在RabbitMQ的两端,它主要是通过嵌入消费者和生产者的代码都接管生产和消费的作用。如上所述,有没有办法设置芹菜?谢谢

回答

4

这是没有必要使用芹菜发布消息。您可以从自己的应用发布消息到RabbitMQ或其他经纪商,并使用Celery消费任务。

芹菜使用简单的消息protocol。你可以在你的应用程序中实现客户端。

如果你不想实现协议的客户端,你可以实现一个简单的http服务器来接受请求并进行适当的调用。像this

2

是的!

您可以将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) 

测试它:

蟒-m芹菜-A主工人

参见:Using Celery with existing RabbitMQ messages

+0

谢谢你的回答。 – Jaigus 2016-01-24 00:13:27