如何在rabbitmq中实现一个生产者,多个消费者,多个消费者都能收到同一条消息
场景:用户登录,邀请其它用户进行视频会议,收到邀请的用户进入会议
rabbitmq实现思路:
选型:发布订阅模式(Publish/Subscribe)
一个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列绑定交换机,生产者发送的消息经过交换机,到达队列,实现一个消息被多个消费者获取的目的。
这种情况下,我们有四种交换机可供选择,分别是:
- Direct
- Fanout
- Topic
- Header
由于消费者的数量不固定,所以要动态生成临时队列,无法指定routingkey因此选fanout模式
FanoutExchange 的数据交换策略是把所有到达 FanoutExchange 的消息转发给所有与它绑定的 Queue 上,在这种策略中,routingkey 将不起任何作用
代码实现:
1.pom文件引入rabbitmq依赖
<!-- rabbitMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.配置文件
server:
port: 9091
spring:
application:
name: rabbitmq
# rabbitmq配置
rabbitmq:
host: 192.168.8.142
port: 5672
username: admin
password: admin
virtual-host: my_vhost
3.constant类
package com.anychat.rabbitmqtest.constant;
/**
* @author Liby
* @date 2022-05-05 10:02
* @description:
* @version