Rebbitmq-3-SpringBoot整合

一、依赖

Rebbitmq-3-SpringBoot整合

二、配置

自动配置+yml配置文件

Rebbitmq-3-SpringBoot整合

三、启用rabbitmq

现在很多新的jar包不用打注解,有的老版本需要打,还是建议直接打上

Rebbitmq-3-SpringBoot整合

四、生产者

Rebbitmq-3-SpringBoot整合

五、消费者

5.1 配置类配置声明及绑定

配置类来配置,声明交换机、声明队列、绑定

Rebbitmq-3-SpringBoot整合

交换机也可以绑定交换机,一层一层传递

Rebbitmq-3-SpringBoot整合

这里注意绑定的是对象,要传对象过来

Rebbitmq-3-SpringBoot整合

或者直接写方法,一般不这么写

Rebbitmq-3-SpringBoot整合

5.2 消费者类

监听

Rebbitmq-3-SpringBoot整合

六、确认消息

6.1 生产者确认

Rebbitmq-3-SpringBoot整合

确认信息选择,通过干预spring生命周期

就是在创建对象之前,要进行确认消息的选择,类似于原生的selectConfirm()方法

Rebbitmq-3-SpringBoot整合

Rebbitmq-3-SpringBoot整合

6.2 消费者确认,默认自动处理

不处理消息,消息时未处理的,把服务器关掉,会返回至队列

Rebbitmq-3-SpringBoot整合

Rebbitmq-3-SpringBoot整合

Rebbitmq-3-SpringBoot整合

七、消息属性

Rebbitmq-3-SpringBoot整合

八、对象序列化

两个项目,包名类名都要一致,否则序列化与反序列化会无法识别

实体类都要实现serializable接口

Rebbitmq-3-SpringBoot整合

json可以跨平台,类似于redis和rabbitmq

java序列化二进制只有java平台可以识别,弄成json很有必要

生产者和消费者都要配配置类

Rebbitmq-3-SpringBoot整合

九、死信队列

满足四个条件,进入死信队列

十、延迟队列

用springboot写,解决延时订单问题

延迟队列还有一种解决方式,就是延迟插件,我们用普通方式来解决

十一、ACK限流:解决秒杀5000个订单,全部添加成功

Rebbitmq-3-SpringBoot整合

注意:测试请求量很大时,这个总时间要设置的大一些,否则一些请求会发送不过去

Rebbitmq-3-SpringBoot整合

十二、延迟插件

Rebbitmq-3-SpringBoot整合

上面方法说白了就是延迟了消费者处理订单队列的时间,用延迟插件可以实现

设置一个延迟属性,setDelay必须有插件才会生效

Rebbitmq-3-SpringBoot整合

发送也要加个属性,注意这里的时间是毫秒(一般int是秒,long是毫秒,这里是int,却还是毫秒)

Rebbitmq-3-SpringBoot整合

还有个现象:延迟队列时一开始判断是没有路由,其实是有路由的,只不过延迟执行路由

Rebbitmq-3-SpringBoot整合

解决:可以在message里加个判断

Rebbitmq-3-SpringBoot整合