【问题标题】:Multiple consumers & producers connected to a message queue, Is that possible in AMQP?多个消费者和生产者连接到一个消息队列,这在 AMQP 中可能吗?
【发布时间】:2011-01-10 19:09:18
【问题描述】:

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

我想确保:

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

使用 AMQP 可以做到吗?

我打算用python和rabbitmq

【问题讨论】:

    标签: python message-queue rabbitmq amqp py-amqplib


    【解决方案1】:

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

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

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

    【讨论】:

    • +1 芹菜看起来很可爱。我会在最近的机会检查一下。
    【解决方案2】:

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

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

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

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

    activemq.prefetchSize: 1
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-17
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多