RabbitMQ RPC教程查询

时间:2015-05-21 06:27:24

标签: java rabbitmq rpc

我正在阅读RabbitMQ here

分享的教程

我假设下面的客户端代码

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

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

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

在收到来自tcp / ip的异步通道的回复时,通道将解析数据并使用相应的请求引用号回应队列。

RPC方法非常适合它,但共享的客户端代码有这个缺点,会喜欢它的反馈。

1 个答案:

答案 0 :(得分:0)

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

相关ID是将您的客户请求与回复进行映射所必需的,因此没有" 不必要"消息

希望有所帮助