路由模式/Routing:
跟订阅模式类似,只不过在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列。
RabbitMqConfig配置:
1、配置两个direct队列和交换机
/**
* direct队列名称1
*/
public static final String DIRECT_QUEUE1="directQueue1";
/**
* direct队列名称2
*/
public static final String DIRECT_QUEUE2="directQueue2";
/**
* 定义一个direct1队列
* @return
*/
@Bean
public Queue directQueue1(){
return new Queue(DIRECT_QUEUE1);
}
/**
* 定义一个direct2队列
* @return
*/
@Bean
public Queue directQueue2(){
return new Queue(DIRECT_QUEUE2);
}
/**
* direct交换机名称
*/
public static final String DIRECT_EXCHANGE1="directExchange1";
/**
* 定义一个direct交换机,点对点模式消息发送1
* @return
*/
@Bean
public DirectExchange directExchange1(){
return new DirectExchange(DIRECT_EXCHANGE1);
}
2、定义绑定key
/**
* 定义一个direct队列和error绑定规则1
* @return
*/
@Bean
public Binding directBinding1(){
return BindingBuilder.bind(directQueue1()).to(directExchange1()).with("error");
}
/**
* 定义一个direct队列和info绑定规则2
* @return
*/
@Bean
public Binding directBinding2(){
return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("info");
}
/**
* 定义一个direct队列和error绑定规则3
* @return
*/
@Bean
public Binding directBinding3(){
return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("error");
}
/**
* 定义一个direct队列和warning绑定规则4
* @return
*/
@Bean
public Binding directBinding4(){
return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("warning");
}
生产者发送消息:
1、RabbitMqService接口创建方法
/**
* 发送路由模式消息
* @return
*/
public void sendRoutingMessage();
2、RabbitMqServiceImpl创建方法实现
/**
* 发送路由模式消息
* @return
*/
@Override
public void sendRoutingMessage() {
amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE1,"error","发送error级别的消息");
amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE1,"info","发送info级别的消息");
amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE1,"warning","发送warning级别的消息");
}
3、更改生产者代码
package com.java996.producer;
import com.java996.producer.Service.RabbitMqService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class ProducerApp {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ProducerApp.class,args);
RabbitMqService rabbitMqService = (RabbitMqService) context.getBean("RabbitMqService");
rabbitMqService.sendRoutingMessage();
}
}
4、交换机的绑定关系
5、队列
消费者接收消息:
1、RabbitMqServiceImpl更改之前的接收方法
@Override
@RabbitListener(queues = {RabbitMqConfig.DIRECT_QUEUE1}) //监听队列
public void receiveMessage2(String message) {
//System.out.println("消费者1,接收到的消息:"+message);
System.out.println("队列1,接收到的消息:"+message);
}
@Override
@RabbitListener(queues = {RabbitMqConfig.DIRECT_QUEUE2}) //监听队列
public void receiveMessage3(String message) {
//System.out.println("消费者2,接收到的消息:"+message);
System.out.println("队列2,接收到的消息:"+message);
}