多个消费者和生产者连接到消息队列,这在AMQP中是否可能?

Pio*_*pla 4 python message-queue amqp rabbitmq py-amqplib

我想创建一个能够OCR文本的进程场.我曾考虑使用由多个OCR进程读取的单个消息队列.

我想确保:

  • 队列中的每条消息最终都会被处理
  • 工作或多或少地平均分配
  • 图像将仅由一个OCR进程解析
  • OCR进程不会立即获得多条消息(因此任何其他免费的OCR进程都可以处理该消息).

使用AMQP可以吗?

我打算用python和rabbitmq

小智 5

是的,正如@nailxx指出的那样.AMQP编程模型与JMS略有不同,因为您只有队列,可以在工作人员之间共享,也可以由单个工作人员私下使用.您还可以轻松设置RabbitMQ以执行PubSub用例或JMS中的内容称为主题.请访问RabbitMQ网站上的" 入门"页面,查找大量有用的信息.

现在,特别是对于您的用例,已经有很多工具可用.人们正在大量使用并得到很好支持的是Celery.这是一篇关于它的博客文章,我认为这将有助于您入门:

如果您有任何疑问,请给我们发电子邮件或发送到rabbitmq-discuss邮件列表.


nkr*_*rkv 3

是的,这是可能的。我正在开发的实时MMO游戏的服务器集群就是这样操作的。我们使用 ActiveMQ,但我认为这一切也可以通过 RabbitMQ 实现。

除了最后一件之外,您提到的所有物品都可以开箱即用。

  • 队列中的每条消息最终都会被处理- 这是消息代理的主要职责之一
  • 工作或多或少是平均分配的——这是另一件事:)
  • 一张图像只能由一个 OCR 进程解析- 为此存在 /topic 和 /queue 的区别。主题就像广播信号,队列就是任务。您的场景中需要一个 /queue

为了使最后一项以所需的方式工作,消费者在订阅队列时发送特定于 AMQ 的参数:

activemq.prefetchSize: 1
Run Code Online (Sandbox Code Playgroud)

此设置可保证消费者在获取一条消息后不会再获取任何消息,直到将消息发送ack到 AMQ。我相信 RabbitMQ 中也存在类似的东西。