生产者
在fanout基础上更改;(只给routeKey是email和duanxin的发)
- 在OrderService添加如下方法
public void makeOrderDirect(String userId,String productId,int num){
        String orderId = UUID.randomUUID().toString();
        System.out.println("订单生成成功:" + orderId);
        String exchangeName = "direct_order_exchange";
//        String routingKey = "";
        //@param1 交换机 @param2 路由key/queue队列名称 @param3 消息内容
        rabbitTemplate.convertAndSend(exchangeName,"email",orderId);
        rabbitTemplate.convertAndSend(exchangeName,"duanxin",orderId);
    }- 增加direct的配置类(完成交换机声明以及绑定)
public class DirectRabbitMqConfiguration {
    //声明交换机
    
    public DirectExchange directExchange(){
        return new DirectExchange("direct_order_exchange",true,false);
    }
    //声明队列
    
    public Queue directSmsQueue(){
        return new Queue("sms.direct.queue",true);
    }
    
    public Queue directDuanxinQueue(){
        return new Queue("duanxin.direct.queue",true);
    }
    
    public Queue directEmailQueue(){
        return new Queue("email.direct.queue",true);
    }
    //完成交换机和队列绑定
    
    public Binding directSmsBinding(){
        return BindingBuilder.bind(directSmsQueue()).to(directExchange()).with("sms");
    }
    
    public Binding directDuanxinBinding(){
        return BindingBuilder.bind(directDuanxinQueue()).to(directExchange()).with("duanxin");
    }
    
    public Binding directEmailBinding(){
        return BindingBuilder.bind(directEmailQueue()).to(directExchange()).with("email");
    }
}- 测试发送查看控制台
void contextLoads1() {
    orderService.makeOrderDirect("1","1",12);
}
- 查看浏览器进入rabbitmq; 
 可以看到只有duanxin和email收到了消息 
- 点进去direct_order_exchange看是否绑定上了routeKey 
消费者
- 修改对应的consumer
(queues = {"duanxin.direct.queue"})
public class DirectDuanxinConsumer {
    
    public void receiveMsg(String msg){
        System.out.println("DirectDuanxinConsumer ---接收到的订单信息是:->" + msg);
    }
}
(queues = {"email.direct.queue"})
public class DirectEmailConsumer {
    
    public void receiveMsg(String msg){
        System.out.println("DirectEmailConsumer ---接收到的订单信息是:->" + msg);
    }
}
(queues = {"sms.direct.queue"})
public class DirectSmsConsumer {
    
    public void receiveMsg(String msg){
        System.out.println("DirectSmsConsumer ---接收到的订单信息是:->" + msg);
    }
}- 启动应用SpringbootOrderRabbitmqConsumerApplication,确实只有email和duanxin收到了 
 当然生产者再次发送,客户端依然会收到。










