【问题标题】:RabbitMQ RPC tutorial queryRabbitMQ RPC 教程查询
【发布时间】:2015-05-21 06:27:24
【问题描述】:

我正在阅读 RabbitMQ here 分享的教程

我假设下面的客户端代码

  while (true)
        {
            var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
            if (ea.BasicProperties.CorrelationId == corrId)
            {
                return Encoding.UTF8.GetString(ea.Body);
            }
        }

将接收队列中的所有消息,并将不必要地遍历未指定给它的消息。无论如何我们可以避免它,即我们可以修改客户端以仅接收仅用于它的消息。

我打算通过 RabbitMQ 实现的基本工作是请求响应模式,其中 Web 服务将接收请求,该请求将在队列中发送数据,数据对象将具有唯一的参考号。这将由异步 tcp 客户端接收,该客户端将根据收到的消息在 tcp/ip 层上发送数据。

在接收到来自 tcp/ip 的异步通道的回复时,通道会解析数据并在队列中回复相应的请求参考号。

RPC 方法非常适合它,但共享的客户端代码有这个缺点,希望得到反馈。

【问题讨论】:

    标签: java rabbitmq rpc


    【解决方案1】:

    其实我不太明白你的目的,但是当你创建一个RPC模型时,你必须创建一个“回复队列”,这个队列只绑定到客户端。 这意味着您将只收到客户端消息,而不是所有消息。 由于 Rabbitmq RPC 模型是异步的,您可以执行多个请求而无需等待响应和回复不能具有相同的发布顺序。

    关联 id 是映射您的客户请求和回复所必需的,因此没有“不必要”消息

    希望对你有帮助

    【讨论】:

    • 我真正想要的是声明一个所有消费者都会收到消息的队列。
    • 我认为(我个人认为)你想要构建它的属性不正确。也许带有“路由键”的主题会更好。 RPC 被设计为具有经典的 RPC 模型,但采用异步方式。
    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多