中间件系列八 RabbitMQ之实现RPC模式

概述本文使用RabbitMQ实现RPC的调用方式,主要包括如下内容:回调队列(Callback queue)RPC调用相关的消息参数:replyTo和correlationIdRPC调用的客户端和服务端的demo代码本文实现功能说明本文使用RabbitMQ实现RPC的调用方式,我们需要使用新的队列:回调队列(Callback queue)RPC需要涉及消息的两个重要属性:replyTo:
摘要由CSDN通过智能技术生成

1. 概述

本文使用RabbitMQ实现RPC的调用方式,主要包括如下内容:

  • 回调队列(Callback queue)
  • RPC调用相关的消息参数:replyTo和correlationId
  • RPC调用的客户端和服务端的demo代码

2. 本文实现功能说明

本文使用RabbitMQ实现RPC的调用方式,我们需要使用新的队列:回调队列(Callback queue)

RPC需要涉及消息的两个重要属性:

  • replyTo: 存储回调队列的名称
  • correlationId: 唯一标识本次的请求,主要用于RPC调用

这里写图片描述

我们实现如上图的功能:

1. RPC客户端启动后,创建一个匿名、独占的、回调的队列
2. RPC客户端设置消息的2个属性:replyTo和correlationId,然后将消息发送到队列rpc_queue
3. RPC服务端在队列rpc_queue上等待消息。RPC服务端处理完收到消息后,然后将处理结果封装成消息发送到replyTo指定的队列上,并且此消息带上correlationId(此值为收到消息里的correlationId)
4. RPC客户端在队列replyTo上等待消息,当收到消息后,它会判断收到消息的correlationId。如果值和自己之前发送的一样,则这个值就是RPC的处理结果

3. RPC客户端: RpcClient代码

主要业务逻辑如下:

1. 配置连接工厂
2. 建立TCP连接
3. 在TCP连接的基础上创建通道
4. 定义临时队列replyQueueName,声明唯一标志本次请求corrId,并将replyQueueName和corrId配置要发送的消息队列中
5. 使用默认的交换机发送消息到队列rpc_queue中
6. 使用阻塞队列BlockingQueue阻塞当前进程
7. 收到请求后,将请求放入BlockingQueue中,主线程被唤醒,打印返回内容

下面只列出不同的地方:
第4,5步代码如下

// 定义临时队列,并返回生成的队列名称
String replyQueueName = channel.queueDeclare().getQueue();

// 唯一标志本次请求
String corrId = UUID.randomUUID().toString();
// 生成发送消息的属性
AMQP.BasicProperties
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值