配置文件
1.打开Rabbitmq的配置类,发现默认配置为本地,所以若你是没有改变,不用配置文件中配置
配置开启rabbitmq
创建队列
1.可以选择配置页面**http://localhost:15672/#/**配置交换器,路由规则,消息队列
2.我这里代码配置了
测试类中
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void bind() {
amqpAdmin.declareExchange(new DirectExchange("direct.exchange2"));
amqpAdmin.declareQueue(new Queue("direct.queue2",true)); //持久化数据到erlang数据库,服务器宕机重启还在
amqpAdmin.declareBinding(new Binding("direct.queue2", org.springframework.amqp.core.Binding.DestinationType.QUEUE,"direct.exchange2","direct.key2",null));
}
然后单独运行一次,让rabbitmq先创建这些东西
这段代码意思:声明一个交换器命名direct.exchange2 , 队列direct.queue2,路由规则为direct.key2
创建配置类,消息以JSON形式保存规则
创建监听器,监听队列
向队列发送消息
@Autowired
RabbitTemplate rabbitTemplate;
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void bind() {
amqpAdmin.declareExchange(new DirectExchange("direct.exchange2"));
amqpAdmin.declareQueue(new Queue("direct.queue2",true));
amqpAdmin.declareBinding(new Binding("direct.queue2", org.springframework.amqp.core.Binding.DestinationType.QUEUE,"direct.exchange2","direct.key2",null));
}
@Test
public void send() { //**运行这个测试类**
for (int i = 0; i < 5; i++) {
rabbitTemplate.convertAndSend("direct.exchange2","direct.key2",new Person().setName("gqs"+ i));
}
}
控制台打出
ps:
管理界面获取消息
windows配置管理界面
docker 配置管理界面
docker ps -a
docker exec -itRabbitMQ镜像ID/容器名字
bash
rabbitmq-plugins enable rabbitmq_management
2.一个消息队列可以放多个类型,但是监听器只能取指定类型,其他类型会报错,但是可以通过Object来取,就可以了
3.rabbitmq发送消息队列测试时,每次监听控制台都会少几条发送数据,原来是发送信息时也加载了spring环境,里面监听器会运行一下,消费了几条消息,解决办法:在测试类发送消息时,把开启rabbitmq注解或者服务一下就可以了