通过rabbitMq设置延迟队列,用到15672图形界面
1.写个通用的baseMq
2.继承这个baseMQ会要求重载processMessageBodyAsync ,然后就可以在这里面写自己实际的业务,比如我的为用户确认24小时候收货 去平安银行结算。
3.接着在spring-rabbitmq.xml里面加个bean组件(class名为刚刚那个mq的全路径)。加一个监听,一个queue。看清了,queue是task开头的,监听里面的ref是上面bean组件的id
4. 在mq生产者新增一个方法,用于消费者去消费
MQConstants是个常量枚举类,需要建两个常量,名称为delay_exchange、delay_rk开头。记住这2个常量名称,后面管理后台要用。
5.去实际用的地方吃掉这个mq(比如我的是用户确认收货之后执行)
@Resource
private MessageQueueProducer messageQueueProducer;
6.自此,代码中已经完成,还需要去rabbitmq管理后台去设置才能正常跑。
打开mq的管理后台,比如mq在你本地就是127.0.0.1:15672 。账号密码也是你设置的,如果不是你弄得,去问对应的运维或者同事
7.登录之后 界面是这样的,点击Exchange
8.滑到最下面 新增前面说到MQConstants是个常量枚举类
一共要加2个,分别是delay_exchange、task_exchange开头的,看清了,这里是exchange。后面要用到的
Type选direct
9.点击最上面的Queue 还是滑到最下面。
先加个延迟队列,名称以delay_queue_开头, 看清楚了 这里是queue 上面的是exchange
现在说下各个参数
Message TTL为时间,比如需要等一天就是60*60*24*1000= 86400000
Dead letter exchange 填task_exchange_开头的那个 上一步说了,为了和死性队列绑定
Dead letter routing key:填task_rk_开头的,和上面的区别是这个是rk 上面的是exchange
这两个参数别搞错了
10.新增完之后,刷新页面,找到这个queue,点一下,检查下参数有没有错
11.滑到下面 用exchange和rk绑定这个延迟队列。
12.接下来去建死性队列,和延迟队列差不多,但是名称通过task_queue开头,
看清楚了,是delay开头的 ,然后exchange和rk
13.建完了也点进去,用exchange和rk绑定这个延迟队列。
看清楚了,是task开头的 ,然后exchange和rk
14.至此,mq已全部完成,可以开始调试了
弄完之后记得检查2个queue有没有绑定exchange和rk,吧鼠标移到上面去,会变成一个小手,可以点进去的
然后检查delay是否有绑定task,如果没绑定的话 只能删掉这个delay重新开始建(反正我是没找到mq里面有编辑的)
我先讲下流程吧。
生产者生产之后,先产出Delay的这个queue,然后到了指定时间之后就去task这个queue去真正的执行自己写的逻辑代码,delay_queue只是一个用于延迟的。
15.遇到自己实在解决不了的问题 请邮箱[email protected]