【问题标题】:Is the RabbitMQ RPC a kind of "Work queue" with response?RabbitMQ RPC 是一种带有响应的“工作队列”吗?
【发布时间】:2025-12-09 14:50:02
【问题描述】:

RabbitMQ RPC 是一种有响应的工作队列吗? 在 RPC 描述中您可以阅读:

如果 RPC 服务器太慢,您可以通过运行另一台来扩展。尝试在新控制台中运行第二个 rpc_server.py

所以在我看来,RPC 是一个工作队列,如果任务完成,每个工作人员都会做出响应。还是我错了?

工作队列:https://www.rabbitmq.com/tutorials/tutorial-two-spring-amqp.html

RPC:https://www.rabbitmq.com/tutorials/tutorial-six-spring-amqp.html

提前致谢。

【问题讨论】:

    标签: rabbitmq queue


    【解决方案1】:

    这两章是不同的案例,教不同的东西。

    Worker Queue会教你预取的概念。可以设置basicQos。

    RPC向你展示message的BasicProperties和Queue的专有性。

    如果您想了解更多关于basicQos/BasicProperties/等的信息,可以查看apispec

    您还可以将工作队列和 RPC 结合在一起。您可以将两个或更多服务器附加到使用者 rpc_queue。

    【讨论】:

    • "您也可以将工作队列和 RPC 结合在一起。您可以将两个或更多服务器附加到消费者 rpc_queue。"这正是我想知道的一点。不止一台服务器=“工作人员”正在监听同一个队列,只有一台服务器将从队列中获取消息,处理他的工作并发送回客户端?我完全理解 RPC 和 Worker Queue 是 RabbitMQ 提供的不同方法。因此,如果我在此处解释的具有多个服务器的 RPC 的行为可以说它是 RPC 和 Worker Queue 的一种“混合”?
    【解决方案2】:

    AMQP 教程旨在为您提供使用基本 AMQP 概念实现常见模式的工具。所以请记住,我们只是评论教程中的实现,没有别的。如果它更适合您的需要,您可以选择更改它的工作方式。

    因此,这些实现之间存在相似之处,您将在教程的一个步骤到另一个步骤中使用一些工具。例如,RabbitMQ 中固有一种类型的队列,您在本教程的第 1 步到第 6 步中都在使用它。同样,建议的 RPC 和工作队列实现都使用直接交换。

    但也有区别。例如,工作队列(如教程中所述)是非独占的(意味着它可以被多个连接/消费者读取和使用),而 RPC 教程声明其队列是独占的。更重要的是,RPC 教程向您解释了如何使用“回复”功能,以及能够实现 RPC 模式的相关 ID。无论如何,您可能总是会选择这是否对您有好处。

    RabbitMQ 不是“RPC”或“工作队列”框架。它为您提供了一组工具来实现此类模式,但它比这更强大。您必须了解这些概念以及它们如何组合在一起以实现这些模式,而不是“如何使用 RabbitMQ 实现 RPC”作为一个整体。

    希望这会有所帮助。

    【讨论】:

      最近更新 更多