③. SpringBoot案例 - 通配符模式
- ①. 生产者代码如下
//3. topic模式 public void makeTopicOrder(Long userId, Long productId){ // 1: 模拟用户下单 String orderNumer = UUID.randomUUID().toString(); System.out.println("用户 " + userId + ",订单编号是:" + orderNumer); // 发送订单信息给RabbitMQ Sms和微信发送消息 // 匹配规则:#.sms.#、#.weChat.# rabbitTemplate.convertAndSend("topic_order_exchange", "weChat.sms", orderNumer); }
②. 消费者使用注解的方式替换配置类
// bindings其实就是用来确定队列和交换机绑定关系 @RabbitListener(bindings =@QueueBinding( // email.fanout.queue 是队列名字,这个名字你可以自定随便定义。 value = @Queue(value = "email.topic.queue",autoDelete = "false"), // order.fanout 交换机的名字 必须和生产者保持一致 exchange = @Exchange(value = "topic_order_exchange", // 这里是确定的rabbitmq模式是:fanout 是以广播模式 、 发布订阅模式 type = ExchangeTypes.TOPIC), key = "#.email.#" )) @Component public class TopicEmailConsumer { @RabbitHandler public void reviceMessage(String message){ System.out.println("email------topic模式:"+message); } }
@Component // bindings其实就是用来确定队列和交换机绑定关系 @RabbitListener(bindings =@QueueBinding( // email.fanout.queue 是队列名字,这个名字你可以自定随便定义。 value = @Queue(value = "sms.topic.queue",autoDelete = "false"), // order.fanout 交换机的名字 必须和生产者保持一致 exchange = @Exchange(value = "topic_order_exchange", // 这里是确定的rabbitmq模式是:fanout 是以广播模式 、 发布订阅模式 type = ExchangeTypes.TOPIC), key = "#.sms.#" )) public class TopicSmsConsumer{ @RabbitHandler public void reviceMessage(String message){ System.out.println("sms------topic模式:"+message); } }
@Component // bindings其实就是用来确定队列和交换机绑定关系 @RabbitListener(bindings =@QueueBinding( // email.fanout.queue 是队列名字,这个名字你可以自定随便定义。 value = @Queue(value = "weChat.topic.queue",autoDelete = "false"), // order.fanout 交换机的名字 必须和生产者保持一致 exchange = @Exchange(value = "topic_order_exchange", // 这里是确定的rabbitmq模式是:fanout 是以广播模式 、 发布订阅模式 type = ExchangeTypes.TOPIC), key = "#.sms.#" )) public class TopicWeChatConsumer { @RabbitHandler public void reviceMessage(String message){ System.out.println("weChat------topic模式:"+message); } }