代码之家  ›  专栏  ›  技术社区  ›  Piotr Czapla

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

  •  4
  • Piotr Czapla  · 技术社区  · 15 年前

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

    我想确保:

    • 最终处理队列中的每个消息
    • 工作或多或少是均匀分布的。
    • 一个图像只能由一个OCR进程解析
    • 一个OCR进程不会同时获得多条消息(这样任何其他空闲的OCR进程都可以处理该消息)。

    是否可以使用AMQP?

    我计划使用python和rabbitmq

    2 回复  |  直到 13 年前
        1
  •  3
  •   nkrkv    15 年前

    是的,这是可能的。服务器集群的实时MMO游戏,我正在努力这样操作。我们使用activemq,但我认为rabbitmq也可以做到这一点。

    你提到的所有物品都会从盒子里拿出来,除了最后一件。

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

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

    activemq.prefetchSize: 1
    

    此设置可确保消费者在收到一条消息后和发送一条消息之前不会再接收任何消息。 ack 到AMQ。我相信拉比多也存在类似的情况。

        2
  •  5
  •   cdeszaq Sudhir N    13 年前

    是的,正如@nailxx指出的那样。AMQP编程模型与JMS稍有不同,因为您只有 队列 ,可以在工人之间共享,也可以使用 私下地 一个工人。您还可以轻松设置rabbitmq来执行 用例或JMS中的调用 话题 . 请去我们的 Getting Started 页上 RabbitMQ web site 找到很多有用的信息。

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

    如果您有任何问题,请发送电子邮件或邮寄至Rabbitmq讨论邮件列表。

    推荐文章