【技术实现步骤摘要】
基于RabbitMQ死信队列的任务处理方法和系统
[0001]本专利技术属于消息处理
,尤其涉及一种基于RabbitMQ死信队列的任务处理方法和系统。
技术介绍
[0002]RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息。在软件日常开发过程中,会遇到一种场景,当消息处理在消费端系统遇到异常场景返回队列中时,消费端会立即再次获取处理,若此时异常情况未得到解决,就会产生无休止的消息交互,给消费端系统带来极大的负载压力及资源消耗。例如,提现成功后需要发送短信或通知提醒到用户,若正巧运营商升级暂时无法提供服务,系统则持续不断尝试访问运营商,直至运营商系统恢复为止。
[0003]虽然RabbitMQ自身有提供消息过期和死信机制,但两种方式都有局限性。消息过期仅对队列中的首条消息有效;死信队列仅能在队列上设置固定存活时间,基于以上传统方式实现的延迟队列机制则也只能按固定时间差进行消息补偿,缺乏灵活度,且队列消息数据量庞大时,在队列TTL到期的瞬间仍会给消费端系统带来压力。
技术实现思路
[0004]本专利技术针对现有技术中的不足,提供一种基于RabbitMQ死信队列的任务处理方法和系统。
[0005]第一方面,本专利技术提供一种基于RabbitMQ死信队列的任务处理方法,包括:
[0006]S1,创建业务队列normal_queue;配置业务队列的参数x
‑
dead
‑
let ...
【技术保护点】
【技术特征摘要】
1.一种基于RabbitMQ死信队列的任务处理方法,其特征在于,包括:S1,创建业务队列normal_queue;配置业务队列的参数x
‑
dead
‑
letter
‑
exchange和x
‑
dead
‑
letter
‑
routing
‑
key指向死信队列;S2,创建死信队列normal_queue_retry;配置死信队列的参数x
‑
dead
‑
letter
‑
exchange和x
‑
dead
‑
letter
‑
routing
‑
key指向业务队列;S3,配置死信队列的参数x
‑
message
‑
ttl设置补偿消息在死信队列中的存活时间;S4,当业务队列处理消息时,对消息报文头自定义属性retry
‑
times补偿次数进行判断校验;S5,如果存在retry
‑
times属性,则消息为补偿消息并根据阶梯策略判断补偿消息是否到达执行补偿的时间;S6,如果补偿消息已到达最大补偿次数,则直接删除消息;S7,如果补偿消息已到补偿时间,则进行S10的操作;S8,如果补偿消息未到补偿时间,则将消息再返回死信队列中等待下次轮询并进行S13的操作;S9,如果不存在retry
‑
times属性,则消息为正常消息并进行S10的操作;S10,判断消息正常处理是否成功;S11,如果否,则复制当前消息报文并在消息头中添加自定义属性msg
‑
timestamp为当前时间的时间戳,并将消息发送至死信队列;S12,如果是,则正常确认并删除消息;S13,消息在延迟队列到期后通过死信队列的交换机转发至与消息携带的路由键相匹配的业务队列中,以供消费者尝试消费并返回执行S4的操作。2.根据权利要求1所述的基于RabbitMQ死信队列的任务处理方法,其特征在于,所述配置死信队列的参数x
‑
message
‑
ttl设置补偿消息在死信队列中的存活时间,包括:在消息本身的存活时间大于消息所在队列的存活时间的情况下,消息本身的存活时间取决于其所在队列的存活时间;在消息本身的存活时间小于消息所在队列的存活时间的情况下,消息满足本身的存活时间后变为死信。3.根据权利要求1所述的基于RabbitMQ死信队列的任务处理方法,其特征在于,在消息消费异常需要补偿时,采用由消费者自定义消息重新推送消息的方式:使用当前消息队列的消息报文体,创建一条带有自定义消息头的消息;自定义消息头包含字段retry
‑
times和msg
‑
timestamp,最终组合后由消费者主动推送至延迟队列,最后调用basicAck把当前消息队列的消息确认消费,从消息队列中抹除。4.根据权利要求3所述的基于RabbitMQ死信队列的任务处理方法,其特征在于,如果消息头中无自定义字段,代表是首次进入拒绝策略,则retry
‑
times设置初始值1;如果消息头中存在自定义字段,则获取retry
‑
times当前值+1并重新赋值。5.根据权利要求1所述的基于RabbitMQ死信队列的任务处理方法,其特征在于,针对消息执行策略,在消费者获取到消息队列的消息准备业务执行前,增加消费前置校验:校验当前消息队列的消息是否为补偿消息且已达到预期的执行时间;获取消息队列的消息报文头,如果消息报文头中含有自定义字段retry
‑
times,代表当
前消息队列...
【专利技术属性】
技术研发人员:贾建华,
申请(专利权)人:南银法巴消费金融有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。