十、RabbitMQ知识点补充
1、RPC实现
1)、实现思路
1)当客户端启动时,创建一个匿名的回调队列
2)客户单为RPC请求设置2个属性:replyTo用来告知RPC服务端回复请求时的目的队列,即回调队列;correlationId用来标记一个请求
3)请求被发送到rpc_queue队列中
4)RPC服务端监听rpc_queue队列中的请求,当请求到来时,服务端会处理并且把带有结果的消息发送给客户端。接收的队列就是replyTo设定的对调队列
5)客户端监听回调队列,当有消息时,检查correlationId属性,如果与请求匹配,那就是结果了
2)、使用SpringBoot实现RPC
消费者:
@Component
public class RabbitReceiver {
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "rpc_queue", durable = "true"),
exchange = @Exchange(value = "rpc_exchange"),
key = "rpc"
))
@RabbitHandler
public String onMessage(String message) {
System.out.println("消费端:" + message);
return message;
}
}
生产者:
@Component
public class RabbitProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(String message) {
Object result = rabbitTemplate.convertSendAndReceive("rpc_exchange", "rpc", "hello world");
System.out.println("回调结果:" + result);
}
}
测试类:
@Autowired
private RabbitProducer rabbitProducer;
@Test
public void sendTest() {
rabbitProducer.send("rpc test");
}