rabbitmq

一、RabbitMq的用处

1、削峰:高并发环境下,服务业务处理不过,可以把请求存放入Mq中,由服务自行按照自己的处理能力慢慢处理。若mq里面也存放满分了就直接抛出异常即可。

2、服务解耦;比如:A服务有个业务需要同时发送数据给B、C、D三个服务,后续可能因为业务的变更不需要发数据给其中的某个服务又或者新增发数据到一个新的E服务,那么这样的变动A服务每次都需要修改代码,那么这个时候我直接采用mq进行处理的话,可能很好的处理掉这个问题。A服务只管往特定的队列发消息其他需要接收的业务端自行进行消息的订阅即可。

3、异步通知:短信发送等

二、RabbitMq实现延迟队列

1、使用死信队列玩出延迟队列功能

给消息设置过期时间不推荐使用。因为mq从队列里面查询过期消息是惰性检测的。

即它会拿取队列里面的第一个元素,如果队列里面的第一个元素设置了2小时过期而第二个元素设置了2秒过期

那么mq检测到第一个元素为2小时过期,那么它会2小时候再来拿取元素消费,而第二个元素的2秒过期实际需要等到前面那个元素被消费后才能被消息。所以推荐使用给消息队列设置过期时间来实现延迟队列。

但是给消息队列设置过期时间也存问题。因为我们需要根据不同的时间生成不同的消息队列。

比如:1分钟、30分钟等等队列。所以强烈推荐使用RabbitMQ的x-deal-message插件来实现延迟队

2、使用RabbitMq的x-deal-message插件实现(推荐使用这个)