rabbitmq-rpc
前面讲的几个交换器,我们都是单向的消息发送,生产者将消息发送给消费者就不管了。在实际业务中,我们有时候要等耐消费者将结果返回给我们,或者说我么需要消费者上的一个功能,一个方法,一个接口返回给我们的值。但是往往我们的系统是不同的子系统,分布在不同的电脑,不能直接通过方法来调用,所以需要使用到RPC(Remote Procedure Call)远程过程调用模式。
RabbitMQ实现RPC的方式很简单,生产者发送一条带有标签(消息ID(correlation_id)+回调队列名称)的消息到发送队列,消费者(也称RPC服务端)从发送队列获取消息并处理业务,解析标签的信息将业务结果发送到指定的回调队列,生产者从回调队列中根据标签的信息获取发送消息的返回结果。
sample:
生产者
package com.enjoy.rabbitmqtest;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.TimeoutException;
public class RpcProducer {
public static final String EXCHANGE = "exchange_rpc";
public static final String URL = "localhost";
public static final String USER = "test";
public static final String PASS_WORD = "test";
public static final String VIRTUL = "/test";
public static final String ROUTING_KEY ="routekey.rpc";
public static final String QUEUE = "queue_rpc";
public static void main(String[] args) {
//连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(URL);
factory.setUsername(USER);
factory.setPassword(PASS_WORD);
factory.setVirtualH