SpringBoot---RabbitMQ消息队列_1(fanout类型的交换器)
1、首先下载安装好Rabbit MQ,使用Username : guest Password: guest登录
2、观察目前RabbitMq中的Exchange和queue的情况。下图是默认存在的交换器
3、 默认没有任何消息队列
RabbitMQ和SpringBoot整合
RabbitMq交换器接收到的消息会广播到每一个绑定的消息队列。(fanout类型的交换器)
Spring提供对RabbitMQ的封装如下: (1)AmqpAdmin bean对象 管理rabbitMQ的Bean对象 创建交换器、绑定队列等 (2)RabbitTemplate 消息的操作对象
1、创建一个SpringBoot工程,添加RabbitMq的启动依赖
2、配置文件配置
# 配置RabbitMQ消息中间件连接配置 spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest #配置RabbitMQ虚拟主机路径/,默认可以省略 spring.rabbitmq.virtual-host=/
3、在test文件夹的测试类中创建以下测试方法,用于在RabbitMq添加队列和交换器
@SpringBootTest class Rabbitmq14ApplicationTests { @Autowired AmqpAdmin amqpAdmin;
@Resource RabbitTemplate rabbitTemplate; @Test public void adminRabbitMq(){ //1、创建一个交换器 amqpAdmin.declareExchange(new FanoutExchange("my_fanout_exchange")); //2、创建队列 amqpAdmin.declareQueue(new Queue("queue_email")); amqpAdmin.declareQueue(new Queue("queue_sms")); //3、绑定交换器和队列 amqpAdmin.declareBinding(new Binding("queue_email",Binding.DestinationType.QUEUE,"my_fanout_exchange","",null)); amqpAdmin.declareBinding(new Binding("queue_sms",Binding.DestinationType.QUEUE,"my_fanout_exchange","",null)); System.out.println("消息队列创建成功!"); }}
4、运行该测试方法。观察控制台输出,同时观察RabbitMq
5、添加配置类
@Configuration public class RabbitMQConfig { /** * 定制JSON格式的消息转换器 * @return */ @Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); } }
添加User类

@Data public class User { Long id; String username; String email; int age; }
6、将消息发送到RabbitMq交换器,在测试类中添加下面方法,发送100个消息。
@Test public void publishMag(){ User user=new User(); user.setAge(30); user.setId(10000L); user.setEmail("test@aliyun.com"); user.setUsername("builderMsg"); for(int i=0;i<100;i++){ rabbitTemplate.convertAndSend("fanout_exchange","",user); //fanout_exchange自定义的交换器 } System.out.println("消息发送成功!"); }
观察RabbitMq的后台(其中Ready的消息为100,表示队列中没有被消费的数据。)
7、编写监听类
@Service public class MessageService { int countOfEmailMsg=0; int countOfSmsMsg=0; @RabbitListener(queues = "queue_sms") public void readSmsQueue(Message message){ byte[] body=message.getBody(); String s=new String(body);//user countOfSmsMsg++; System.out.println(countOfEmailMsg+"短信业务接收到消息:"+s); } @RabbitListener(queues = "queue_email") public void readEmailQueue(Message message){ byte[] body=message.getBody(); String s=new String(body); countOfEmailMsg++; System.out.println(countOfEmailMsg+"邮件业务接收到消息:"+s); } }
启动工程。观察控制台输出