RabbitMQ中的RPC模式,关于correlation_id的几个问题

问题来源于RabbitMQ RPC模式教程:https://www.rabbitmq.com/tuto...

Client获取到Server返回的数据后,需要比对correlation_id是否相同,在官方给出的例子中,如果correlation_id不同,没有做处理:

         String ctag = channel.basicConsume(replyQueueName, true, (consumerTag, delivery) -> {
            if (delivery.getProperties().getCorrelationId().equals(corrId)) {
                response.offer(new String(delivery.getBody(), "UTF-8"));
            }
        }, consumerTag -> {
        });

我的问题是:

1.如果Client发送了分别含有多个correlation_id的请求,correlation_id为A的请求有没有可能获取到correlation_id为B的结果?

2.如果A获取到correlation_id为B的消息,是不是意味着获取到了B请求的结果?

3.这段代码显示如果获取到非A的结果,不做任何处理,是不是就相当于丢弃了B的结果?那么B请求该怎么办?

阅读 2.7k
1 个回答

这是用 MQ 模拟的 RPC,所谓的请求和响应其实还是走的发布和订阅机制。

既然是发布订阅,那本来也不是一一对应的关系,所以要判断啊。

回到你的问题:

  1. 可能,所以要判断。
  2. 对,不然呢?
  3. 没丢,等着真正订阅B的那个去处理。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题