0
点赞
收藏
分享

微信扫一扫

springboot整合rabbitmq(direct路由模式)

生产者

在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的配置类(完成交换机声明以及绑定)
@Configuration
public class DirectRabbitMqConfiguration {


//声明交换机
@Bean
public DirectExchange directExchange(){

return new DirectExchange("direct_order_exchange",true,false);
}

//声明队列
@Bean
public Queue directSmsQueue(){
return new Queue("sms.direct.queue",true);
}
@Bean
public Queue directDuanxinQueue(){
return new Queue("duanxin.direct.queue",true);
}
@Bean
public Queue directEmailQueue(){
return new Queue("email.direct.queue",true);
}

//完成交换机和队列绑定
@Bean
public Binding directSmsBinding(){
return BindingBuilder.bind(directSmsQueue()).to(directExchange()).with("sms");
}
@Bean
public Binding directDuanxinBinding(){
return BindingBuilder.bind(directDuanxinQueue()).to(directExchange()).with("duanxin");
}
@Bean
public Binding directEmailBinding(){
return BindingBuilder.bind(directEmailQueue()).to(directExchange()).with("email");
}
}
  • 测试发送查看控制台
@Test
void contextLoads1() {
orderService.makeOrderDirect("1","1",12);
}

springboot整合rabbitmq(direct路由模式)_spring

  • 查看浏览器进入rabbitmq;
    springboot整合rabbitmq(direct路由模式)_客户端_02
    可以看到只有duanxin和email收到了消息
    springboot整合rabbitmq(direct路由模式)_启动应用_03
  • 点进去direct_order_exchange看是否绑定上了routeKey
    springboot整合rabbitmq(direct路由模式)_客户端_04

消费者

  • 修改对应的consumer
@Service
@RabbitListener(queues = {"duanxin.direct.queue"})
public class DirectDuanxinConsumer {

@RabbitHandler
public void receiveMsg(String msg){
System.out.println("DirectDuanxinConsumer ---接收到的订单信息是:->" + msg);
}
}
@Service
@RabbitListener(queues = {"email.direct.queue"})
public class DirectEmailConsumer {

@RabbitHandler
public void receiveMsg(String msg){
System.out.println("DirectEmailConsumer ---接收到的订单信息是:->" + msg);
}
}
@Service
@RabbitListener(queues = {"sms.direct.queue"})
public class DirectSmsConsumer {

@RabbitHandler
public void receiveMsg(String msg){
System.out.println("DirectSmsConsumer ---接收到的订单信息是:->" + msg);
}
}
  • 启动应用SpringbootOrderRabbitmqConsumerApplication,确实只有email和duanxin收到了
    springboot整合rabbitmq(direct路由模式)_客户端_05
    当然生产者再次发送,客户端依然会收到。




举报

相关推荐

0 条评论