RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知

场景

在第三方支付中,例如支付宝、或者微信,对于订单请求,第三方支付系统采用的是消息同步返回、异步通知+主动补偿查询的补偿机制
1.商户请求交易接口成功。
2.接受银行的异步通知。
3.处理业务,将通知URL和通知的数据放到队列中。通知队列是常驻的。
4.如果通知商户成功/失败更新通知状态。如果通知失败,根据通知间隔重新把通知数据放到通知队列里。

5*(2^n-1)秒后再次通知,n指回调次数,最大为5次!
每次通知超时时间5秒。

支付计费中心对于订单请求信息的处理:
通过消息同步返回、异步通知、主动补偿查询相结合的机制
其中对于订单的异步通知,目前的通知策略为3s、30s、60s、120s、180、300s的阶梯性通知。
返回成功情况下就不继续通知了

使用rabbitmq的消息延迟+死信队列来实现

RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知_第1张图片

 

producer发布消息,通过exchangeA的消息会被分发到QueueA,Consumer监听queueA,一旦有消息到来就被消费,这边的消费业务就是通知前端,如果通知失败,就创建一个延迟队列declareQueue,设置每个消息的ttl然后通过declare_exchange将消息分发到declare_queue,因为declare_queue没有consumer并且declare_queue中的消息设置了ttl,当ttl到期后,将通过DLX路由到queueA,被重新消费

你可能感兴趣的:(java)