使用celery / RabbitMQ(队列)在Django请求/响应周期中点击API

时间:2011-03-25 08:08:16

标签: python django message-queue rabbitmq celery

我正在研究一种产品,它需要抓取API并计算并返回结果。 我目前正在使用Django作为产品。我详细了解了Celery和RabbitMQ的文档以及一般的队列。

我想要达到的目标是: 1.监控/管理为不同供应商调用的每个API。 2.具有多个使用者的多个队列。 3.队列中的实时重新调度。

这里的主要问题是,在我们的整个周期中,主要耗时的过程是API请求需要1秒到20秒之间的任何时间。使用芹菜/ RabbitMQ是个好主意。我不能使用带有确认的Rabbit队列来发出API请求并等待它过来,同时保持其他人在队列中等待,没有确认的队列无助于跟踪失败的请求并且无法重试它们。 那么,我如何使用队列来解决这个问题呢?

第二个对于监控,我看了一下这个http://www.rabbitmq.com/management.html,即管理n监控插件,但我找不到一种方法来获取队列中已处理消息的信息,这在我的情况下非常重要。 有什么方法可以获得RabbitMQ的这个信息。

我是否应该使用像ActiveMQ或ZeroMQ这样的任何其他队列来获得更好的监控插件,以便从队列中获取有关已处理消息的信息。

1 个答案:

答案 0 :(得分:0)

我已经使用Beanstalk一段时间了,取得了巨大的成功。

服务器:https://github.com/kr/beanstalkd
客户端库:https://github.com/PeterScott/beanstalkc
Django Helper:https://github.com/jonasvp/django-beanstalkd
Django Admin App:https://github.com/humanfromearth/django-beanstalk

我认为Beanstalk有许多您正在寻找的选项。例如:
1.您可以设置TTR(运行时间),以确定作业在释放回队列之前必须运行多长时间 2.如果作业接近其TTR的末尾,您可以“触摸”它以重置TTR倒计时
3. Beanstalk会跟踪服务器,管道和作业级别的统计信息。所以你可以看到有多少工作是活跃的,延迟的,总数等等。

RabbitMQ非常强大,但它的重量很重。我发现Beanstalk更轻,更灵活,更易于使用。