一种消息队列可靠性投递的实现方法技术

技术编号:39404965 阅读:9 留言:0更新日期:2023-11-19 15:57
本发明专利技术涉及消息中间件技术领域,具体为一种消息队列可靠性投递的实现方法,包括以下步骤:消息发送;消费端消费消息;消息确认;消息重发;有益效果为:本发明专利技术提出的消息队列可靠性投递的实现方法,保证消息投递的可靠性,尽可能保证所有的消息被成功发送消费,完善的消息失败重发机制;相较于普通的完全依赖于数据库的消息发送逻辑,减少了对数据库的频繁操作提高了系统的稳定性;适用于不同的消息中间件,如kafka、rabbitmq、rocketmq等中间件。rocketmq等中间件。rocketmq等中间件。

【技术实现步骤摘要】
一种消息队列可靠性投递的实现方法


[0001]本专利技术涉及消息中间件
,具体为一种消息队列可靠性投递的实现方法。

技术介绍

[0002]消息队列(MQ)概述.消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:.当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。消息队列主要解决了应用耦合、异步处理、流量削锋等问题。当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。
[0003]现有技术中,消息队列在实际应用中包括如下四个场景:应用耦合,多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;异步处理,多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;限流削峰,广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;消息驱动的系统,系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理。
[0004]但是,目前消息队列可以实现消息发送之后提供回调方法确认消息已经发送到了服务器,部分实现了消息的发送的可靠性,但是无法实现消息整个生命周期的可靠性,例如消息发送到服务器失败的处理逻辑,消费端消费消息失败怎样进行消息的补偿发送逻辑。

技术实现思路

[0005]本专利技术的目的在于提供一种消息队列可靠性投递的实现方法,以解决上述
技术介绍
中提出的问题。
[0006]为实现上述目的,本专利技术提供如下技术方案:一种消息队列可靠性投递的实现方法,所述实现方法包括以下步骤:
[0007]消息发送;
[0008]消费端消费消息;
[0009]消息确认;
[0010]消息重发。
[0011]优选的,消息发送采用延迟消息发送,延迟消息发送的消息体包含相同的唯一标识,发送到的队列和普通消息分布在两个队列。
[0012]优选的,延迟消息实际的延迟时间需要根据不同的业务逻辑以及测试的具体结果设置。
[0013]优选的,消费端消费完消息之后,在确认发送完ack之后,同步的发送一条消息到队列中,如果消息消费失败发送nack指令,消息会重新回到队列中,如果多次消费仍然消费失败,消息会进入死信队列,运维人员定期检测死信队列中的消息对队列中的关键消息进行手动处理。
[0014]优选的,消息确认的具体操作如下:
[0015]当消息消费端处理完业务逻辑,消费端发送ack命令通知队列消息已被消费完成,队列会移除消息。
[0016]优选的,如果消费失败需要发送Nack消费失败,同时如果消费失败之后,设置消息重回队列或者将消息发送到死信队列,用户手动处理死信队列中的消息;
[0017]当消息消费成功之后,消费端需要发送confirm消息到队列中,队列中消息体包含消费的消息中的唯一标识。
[0018]优选的,消息重发的具体操作如下:
[0019]消息确认服务同时消费延迟队列和确认消息队列中的消息,消费延迟队列中的消息之后将消息的uid存入数据库中。
[0020]优选的,在消费确认消息队列中的消息,如果消息中的消息唯一标识存在在数据库中表示消息被消费成功,如果不存在则代表消息消费失败;消费失败的消息被调用生产端逻辑重新发送逻辑,直至消费端消费成功;进入死信队列的消息不会进行重试。
[0021]与现有技术相比,本专利技术的有益效果是:
[0022]本专利技术提出的消息队列可靠性投递的实现方法,保证消息投递的可靠性,尽可能保证所有的消息被成功发送消费,完善的消息失败重发机制;相较于普通的完全依赖于数据库的消息发送逻辑,减少了对数据库的频繁操作提高了系统的稳定性;适用于不同的消息中间件,如kafka、rabbitmq、rocketmq等中间件。
附图说明
[0023]图1为本专利技术方法流程图。
具体实施方式
[0024]为了使本专利技术的目的、技术方案进行清楚、完整地描述,及优点更加清楚明白,以下结合附图对本专利技术实施例进行进一步详细说明。应当理解,此处所描述的具体实施例是本专利技术一部分实施例,而不是全部的实施例,仅仅用以解释本专利技术实施例,并不用于限定本专利技术实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0025]实施例一
[0026]请参阅图1,本专利技术提供一种技术方案:一种消息队列可靠性投递的实现方法,所述实现方法包括以下步骤:
[0027]①
消息发送
[0028]普通消息发送,发送端需要指定消息体的具体内容以及需要发送到的消息队列的exchange和routekey,消息发送端将消息体发送到消息队列服务器中对应的exchange中,消息体根据routekey会被路由到具体的队列(队列A)中等待消费者消费。
[0029]消息体中需要包含具体的业务逻辑以及可以表示此条消息唯一性的标识,例如直接使用uuid或者使用分布式id获取。
[0030]延迟消息的发送,延迟消息发送的消息体和普通消息的消息体保持一致,同样需要包含相同的唯一标识,发送到的队列和普通消息分布在两个队列(队列B)。
[0031]该延迟消息实际的延迟时间需要根据不同的业务逻辑以及测试的具体结果设置。
[0032]使用消息队列可以完成多应用之间业务逻辑的解耦,避免接口调用失败导致整个流程失败。异步处理,对此功能有需要的服务都可以监听消息队列可以应对高并发的情况。相比串行处理,减少处理时间,在面对大流量高峰的时候可以削峰填谷避免流量过大导致应用系统挂掉的情况。
[0033]②
消费端消费消息
[0034]消息消费端是消费的普通队列(队列A)中的数据,消费端需要指定消费的消息队列的exchange和queue。消费端消费完消息之后,在确认发送完ack之后,会同步的发送一条消息到队列中,如果消息消费失败发送nack指令消息会重新回到队列中,如果多次消费仍然消费失败此条消息会进入死信队列,运维人员需要定期检测死信队列中的消息对队列中的关键消息进行手动处理。
[0035]此方式不仅可以确保在消息发送到broker之后监听回调方法确保消息被准确的发送到broker,还可以保证消息在整个投递消费过程中的可靠性,并且在消息消费失败之后还会重新补偿发送。
[0036]③
消息确认
[0037]当消息消费端处理完业务逻辑,消费端发送ack命令通知队列消息已被消费完成,队列会移除此条消息。
[0038]如果消费失败需要发送Nack消费失败,同时如果消费失败之后可以设置消息重回队列或者将消息发送到死信队列,用户可以手动处理死信队列中的消息。
[0039]当消息消费成功之后,消费端需要发送conf本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种消息队列可靠性投递的实现方法,其特征在于:所述实现方法包括以下步骤:消息发送;消费端消费消息;消息确认;消息重发。2.根据权利要求1所述的一种消息队列可靠性投递的实现方法,其特征在于:消息发送采用延迟消息发送,延迟消息发送的消息体包含相同的唯一标识,发送到的队列和普通消息分布在两个队列。3.根据权利要求2所述的一种消息队列可靠性投递的实现方法,其特征在于:延迟消息实际的延迟时间需要根据不同的业务逻辑以及测试的具体结果设置。4.根据权利要求1所述的一种消息队列可靠性投递的实现方法,其特征在于:消费端消费完消息之后,在确认发送完ack之后,同步的发送一条消息到队列中,如果消息消费失败发送nack指令,消息会重新回到队列中,如果多次消费仍然消费失败,消息会进入死信队列,运维人员定期检测死信队列中的消息对队列中的关键消息进行手动处理。5.根据权利要求1所述的一种消息队列可靠性投递的实现方法,其特征在于:消息确认的具体操作如下:当消息消费端处理完业务逻...

【专利技术属性】
技术研发人员:李东彬高美容安晓博
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1