Rebbitmq-3-SpringBoot整合
一、依赖
二、配置
自动配置+yml配置文件
三、启用rabbitmq
现在很多新的jar包不用打注解,有的老版本需要打,还是建议直接打上
四、生产者
五、消费者
5.1 配置类配置声明及绑定
配置类来配置,声明交换机、声明队列、绑定
交换机也可以绑定交换机,一层一层传递
这里注意绑定的是对象,要传对象过来
或者直接写方法,一般不这么写
5.2 消费者类
监听
六、确认消息
6.1 生产者确认
确认信息选择,通过干预spring生命周期
就是在创建对象之前,要进行确认消息的选择,类似于原生的selectConfirm()方法
6.2 消费者确认,默认自动处理
不处理消息,消息时未处理的,把服务器关掉,会返回至队列
七、消息属性
八、对象序列化
两个项目,包名类名都要一致,否则序列化与反序列化会无法识别
实体类都要实现serializable接口
json可以跨平台,类似于redis和rabbitmq
java序列化二进制只有java平台可以识别,弄成json很有必要
生产者和消费者都要配配置类
九、死信队列
满足四个条件,进入死信队列
十、延迟队列
用springboot写,解决延时订单问题
延迟队列还有一种解决方式,就是延迟插件,我们用普通方式来解决
十一、ACK限流:解决秒杀5000个订单,全部添加成功
注意:测试请求量很大时,这个总时间要设置的大一些,否则一些请求会发送不过去
十二、延迟插件
上面方法说白了就是延迟了消费者处理订单队列的时间,用延迟插件可以实现
设置一个延迟属性,setDelay必须有插件才会生效
发送也要加个属性,注意这里的时间是毫秒(一般int是秒,long是毫秒,这里是int,却还是毫秒)
还有个现象:延迟队列时一开始判断是没有路由,其实是有路由的,只不过延迟执行路由
解决:可以在message里加个判断