前言:可略过
正常情况下交换机和queue绑定,消息经过交换机发送给指定的队列。队列的消息被监听消费后就被删除,queue的消息仅能被消费一次。
如何解决呢,如果单从queue的角度出发,可能会联想到fanout-广播模式,给每一个消费者配置一个指定queue,这样生产者的消息经fanout类型交换机发送给所有绑定的queue,终端消费者监听queue即可。
思路可行,but太繁琐了,且占内存。如果有一百万个消费者呢,不合理。那把queue的消息监听后存储到数据库,消费者再都去查询怎么样呢?也行不通,因为引入mq就是避免数据库吞吐量小,响应慢。
方法:消费者直接监听交换机即可,不指定queue
@RabbitListener注解,点进去里面有一些封装号的参数,参数格式如下。
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(),
exchange = @Exchange(value =“exchange-name”))
)
注意仅需要指定监听的交换机名称即可,不只当queue,否则一个msg还是只能被消费一次。