5

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

我想确保:

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

使用AMQP可以做到吗?

我打算使用python和rabbitmq

4

2 回答 2

5

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

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

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

于 2010-02-17T10:50:00.453 回答
3

是的,这是可能的。我正在开发的一款实时 MMO 游戏的服务器集群就是以这种方式运行的。我们使用 ActiveMQ,但我认为 RabbitMQ 也可以实现这一切。

你提到的所有项目都是开箱即用的,除了最后一个。

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

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

activemq.prefetchSize: 1

此设置可确保消费者在收到一条消息后不会再收到任何消息,直到它向ackAMQ 发送一条消息。我相信 RabbitMQ 中存在类似的东西。

于 2010-01-29T10:48:49.047 回答