实现消息一次送达的消息中间件辅助系统及消息传送系统的制作方法

文档序号:18632613发布日期:2019-09-11 21:48阅读:275来源:国知局
实现消息一次送达的消息中间件辅助系统及消息传送系统的制作方法

本发明涉及业务传送领域,具体地说是一种实现消息一次送达的消息中间件辅助系统及消息传送系统。



背景技术:

目前互联网领域中,存在不少高性能的消息中间件,其用途是在高并发的网络交易环境中,承担消息异步送达的基本责任,为了实现更高的并发能力,高性能中间件的目标是“保证消息至少一次送达”这种语义,因此开源消息中间件中没有产品能够实现“保证只一次送达”这种语义。

如何实现消息的一次送达,是需要解决的技术问题。



技术实现要素:

本发明的技术任务是针对以上不足,提供一种实现消息一次送达的消息中间件辅助系统及消息传送系统,来解决如何实现消息的一次送达的问题。

第一方面,本发明提供实现消息一次送达的消息中间件辅助系统,包括:

消息发送附加模块,所述消息发送附加模块用于通过注解指定适配器以匹配消息中间件,用于在调用消息中间件的client程序发送消息时生成唯一码并将唯一码注入消息的properties对象中;

消息接收附加模块,所述消息接收附加模块用于通过注解指定适配器以匹配消息中间件,用于当与内存型kv数据库连接失败时指定处理逻辑,并用于在调用消息中间件的clinet程序接收消息之前去重唯一码。

作为优选,消息发送附加模块用于在调用消息中间件的client程序发送消息时通过切面编程的方式生成唯一码。

作为优选,唯一码为采用uuid通用模式生成的方式+时间戳组成的组合码,所述时间戳为毫米级时间戳。

作为优选,消息接收附加模块用于在调用消息中间件的client程序发送消息之前通过切面编程的方式注入去重唯一码。

作为优选,消息接收附加模块用于通过如下步骤在调用消息中间件的client程序发送消息之前通过切面编程的方式注入去重唯一码:

从properties对象中取出唯一码;

持有唯一码、尝试在内存型kv数据库存储唯一码,并接收返回代码;

如果返回代码为已存在,中断处理流程,如果返回代码为存储成功,所述消息进入业务流程处理,如果返回代码为通讯错误,根据指定的当与内存型kv数据库连接失败时的处理逻辑处理消息。

作为优选,消息接收附加模块用于当与内存型kv数据库连接失败时的通过注解指定处理逻辑,并指定处理逻辑为:

fail_back,所述fail_back表示遇到通讯失败时,消息在消息中间件中阻塞,直到恢复通讯;

fail_over,所述fail_over表示遇到通讯失败时,忽略去重逻辑,消息直接抛给业务处理。

作为优选,消息发送附件模块通过注解指定适配器以匹配消息中间件时,适配器至少支持rocketmq和kafka;

消息接收附件模块通过注解指定适配器以匹配消息中间件时,适配器至少支持rocketmq和kafka。

第二方面,本发明提供实现消息一次送达的消息传送系统,包括:

消息中间件,所述消息中间件为开源消息中间件;

业务系统,所述业务系统至少两个,业务系统之间通过消息中间件对接;

辅助系统,所述辅助系统为如第一方面任一项所述的实现消息一次送达的消息中间件辅助系统;

内存型kv数据库,所述内存型数据库与消息接收附加模块连接。

作为优选,所述于业务系统为java开发的业务系统,且编译版本1.7及以上。

本发明的实现消息一次送达的消息中间件辅助系统及消息传送系统具有以下优点:在不增加软件投入的情况,实现业务系统之间消息传递时的幂等去重,省去了软件投入成本。

附图说明

为了更清除地说明本发明实施例中的技术方案,下面将对实施例中描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

下面结合附图对本发明进一步说明。

附图1为实施例1实现消息一次送达的消息中间件辅助系统的工作框图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。

需要理解的是,在本发明实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。在本发明实施例中的“多个”,是指两个或两个以上。

本发明实施例提供实现消息一次送达的消息中间件辅助系统及消息传送系统,用于解决如何实现消息的一次送达的技术问题。

实施例1:

本发明的实现消息一次送达的消息中间件辅助系统,包括消息发送附加模块和消息接收附加模块,消息发送附加模块和消息接收附加模块辅助消息中间件实现业务系统之间信息的一次送达。

消息发送附加模块为采用注解方式开发的,通过注解指定适配器以匹配消息中间件,适配器至少支持rocketmq和kafka。

消息发送附加模块用于在调用消息中间件的client程序发送消息时生成唯一码并将唯一码注入消息的properties对象中。该唯一码用于将当前消息与其他消息区别开,本实施例中唯一码为采用uuid通用模式生成的方式+时间戳组成的组合码,时间戳为毫米级时间戳,在实际应用中也包括其他方式生成的在高并发场景下,使一条消息区别与其他消息的编码。

消息接收附加模块为采用注解方式开发的,通过注解指定适配器以匹配消息中间件,适配器至少支持rocketmq和kafka。

消息接收附加模块应当与内存型kv数据库连接失败时指定处理逻辑,并在注解中指定,处理方式包括如下两种方式:

fail_back,所述fail_back表示遇到通讯失败时,消息在消息中间件中阻塞,直到恢复通讯;

fail_over,所述fail_over表示遇到通讯失败时,忽略去重逻辑,消息直接抛给业务处理。

消息接收附加模块在调用消息中间件的client程序发送消息之前通过切面编程的方式注入去重唯一码消息,去重唯一码通过如下步骤实现:

从properties对象中取出唯一码;

持有唯一码、尝试在内存型kv数据库存储唯一码,并接收返回代码;

如果返回代码为已存在,说明此消息重复,中断处理流程,如果返回代码为存储成功,说明此消息未被消费,消息进入业务流程处理,如果返回代码为通讯错误,说明内存型kv数据库不可用,根据指定的当与内存型kv数据库连接失败时的处理逻辑处理消息。

实施例2:

本发明的实现消息一次送达的消息传送系统,包括消息中间件、业务系统、辅助系统、内存型kv数据库。

消息中间件为开源消息中间件。

业务系统共两个,分别为第一业务系统和第二业务系统,第一业务系统作为发送端,配置有消息发送附加模块,第二业务系统作为接收端,配置有消息接收附加模块,第一业务系统和第二业务系统通过消息中间件对接,消息接收附加模块与内存型kv数据库连接。

上述两个业务系统为java开发的业务系统,且编译版本1.7及以上。

实际应用中,业务系统并不限于两个可为多个,且消息发送附加模块用于作为发送端的业务系统,消息接收附加模块用于作为接收端的业务系统,如果一个业务系统作为发送端同时作为接收端,则该业务系统中同时配置有消息发送附加模块和消息接收附加模块。

该消息传送系统传送方式为:

通过消息发送附加模块通过注解指定适配器类型,与消息中间件匹配;

通过消息发送附加模块调用消息中间件的client程序发送消息时,利用切面编程的方式注入唯一码生成逻辑,生成唯一码后将唯一码注入到消息的properties对象中,该唯一码采用uuid通用生成方式+时间戳(毫秒级)组合的方式;

通过消息接收附加模块在注解中指定适配器类型,以与消息中间件匹配;

通过消息接收附加模块指定当与内存型kv数据库连接时的处理逻辑,处理逻辑分别为:fail_back,表示遇到连接失败时,消息在消息中间件中阻塞,直到恢复连接,fail_over,表示遇到通讯失败时,忽略去重逻辑,消息直接抛给业务处理;

消息中间件的client接收到消息时,通过消息接收附加模块接利用切面编程的方式注入去重逻辑,去重逻辑如下:

从properties对象中取出唯一码;

持有唯一码、尝试在内存型kv数据库存储唯一码,并接收返回代码;

如果返回代码为已存在,中断处理流程,如果返回代码为存储成功,所述消息进入业务流程处理,如果返回代码为通讯错误,根据指定的当与内存型kv数据库连接失败时的处理逻辑处理消息。

以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1