教程相关代码:RabbitMQ入门教程——GitHub
1.分裂模式(Fanout | Publish/subscribe)
Sending messages to many consumers at once
同时向多个消费者发送消息
当我们需要将消息一次发给多个队列时,需要使用这种模式。
- 需要提前将交换机和队列进行绑定
- 路由器会将消息发送到所有绑定在该交换机上的队列
2.实现
2.1 完成MQ页面部署
2.1.1 创建队列
如何创建我们就不细说了,在“直连模式”中我已经写了
2.1.2 创建交换机
在MQ管理页面中进入Exchanges,按照图片中步骤
类型要选择 fanout
2.1.3 交换机绑定队列
点击进入刚刚创建的交换机
绑定交换机与队列
绑定刚刚创建的两个队列,成功后如下图:
2.2 代码编写
2.2.1 环境编写
在上一章中我们已经创建了父工程,这次我们直接在其下创建子模块fanout
创建SpringBoot的启动类,com.lois.fanout.FanoutApplication.class
@SpringBootApplication
public class FanoutApplication {
public static void main(String[] args) {
SpringApplication.run(FanoutApplication.class,args);
}
}
2.2.2 目录结构
这个贴出来只是为了让读者有一个总体概念,不需要创建,在后面会一步步创建
2.2.3 生产者
2.2.3.1编写生产者
在Test包中创建生产者测试类,com.lois.test.ProducerTest.class
@RunWith(SpringRunner.class)
@SpringBootTest(classes = FanoutApplication.class)
public class ProducerTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSend(){
rabbitTemplate.convertAndSend("exchange1","","分裂模式测试");
}
}
注:convertAndSend(交换机名,routingkey,消息) Fanout模式不需要写routingkey
2.2.3.2 测试生产者
运行测试方法testSend(),打开RabbitMQ管理界面,可以看到如图信息:
这表示生产者生产的一条消息,分别发送给了两个队列
2.2.4 消费者
2.2.4.1编写消费者
在java包中创建两个消费者类,com.lois.fanout.customer.Customer1
@Component
@RabbitListener(queues = "queue1")
public class Customer1 {
@RabbitHandler
public void showMessage(String message){
System.out.println("Customer1111接受到的信息:"+message);
}
}
com.lois.fanout.customer.Customer2
@Component
@RabbitListener(queues = "queue2")
public class Customer2 {
@RabbitHandler
public void showMessage(String message){
System.out.println("Customer2222接受到的信息:"+message);
}
}
@RabbitListener(queues = “监听队列的名称”)
两个消费者各自监听一个队列
2.2.4.2 测试消费者
运行FanoutApplication.class,在控制台就能看见输出:
此时,MQ管理页面也能看见消息数量变为0
上一章节:RabbitMQ工作模式之直接模式
下一章节:RabbitMQ工作模式之主题模式
相关链接:
RabbitMQ简单入门教程
RabbitMQ工作模式之直接模式
RabbitMQ工作模式之分裂模式
RabbitMQ工作模式之主题模式
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!