发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种发送和消费MQ消息的方法,能够自由切换消息队列框架,只需配置一次topic和queue,提高了消息传输的效率并节约资源。
本发明还提出一种发送和消费MQ消息的装置。
本发明还提出一种具有上述发送和消费MQ消息的方法的计算机可读存储介质。
根据本发明的第一方面实施例的一种发送和消费MQ消息的方法,包括:发送步骤:基于业务构建消息模型;对所述消息模型配置字段参数;采用预置的加解密信息对所述消息模型进行加密;通过sdk发送加密后的所述消息模型;接收步骤:基于消息队列框架标识设置消息接收组件;所述消息接收组件接收所述消息模型后对所述消息模型采用预置的所述加解密信息进行解密;解析并判断所述消息模型中的所述字段参数与当前所述消息接收组件的目标字段参数是否一致;若判断结果为一致,则超过预设时间后所述消息接收组件返回确认信息至发送方,所述消息消费成功。
根据本发明的一些实施例,sdk发送加密后的所述消息模型的方法包括:基于所述消息队列框架标识初始化消息队列框架发送实例;配置统一消息发送接口。
根据本发明的一些实施例,所述加解密信息包括加密算法类型、加密密钥、解密密钥及所述环境标识。
根据本发明的一些实施例,所述目标字段参数包括环境标识、应用程序ID、业务类型及消息内容。
根据本发明的一些实施例,所述预设时间为三十分钟。
根据本发明的一些实施例,对于同一个topic和queue,所述消息配置为反复轮询发送直至所述发送方接收到返回的所述确认信息。
根据本发明的一些实施例,所述消息队列框架包括rabbitmq、cmq和metaq。
根据本发明的第二方面实施例的一种发送和消费MQ消息的装置,包括:消息发送模块,用于构建发送消息模型并对所述消息模型配置字段参数,以及,采用预置的加解密信息对所述消息模型进行加密后通过sdk进行发送;消息接收模块,用于基于消息队列框架标识初始化消息接收组件,接收所述消息模型后对所述消息模型采用预置的所述加解密信息进行解密,解析并判断所述消息模型中的所述字段参数与当前所述消息接收组件的目标字段参数是否一致,若一致,则超过预设时间后返回确认信息至发送方。
根据本发明的一些实施例,所述消息发送模块包括:SDK发送模块,用于基于所述消息队列框架标识初始化消息队列框架发送实例,并配置统一消息发送接口。
根据本发明的第三方面实施例的一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时能够执行上述任一项所述的一种发送和消费MQ消息的方法的步骤。
根据本发明实施例的一种发送和消费MQ消息的方法,至少具有如下有益效果:能够自动识别并切换到当前使用的消息队列框架,能够自动识别并匹配消息发送的目标微服务与消息消费的微服务,只需配置一次topic和queue,提高了消息传输的效率并节约资源,不同的目标微服务使用不同的加密信息,保证了消息传递的安全性。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
术语解释:
MQ:消息队列;
Cmq:腾讯云平台提供的消息队列;
Topic:主题模式,消息队列常用的模式;
Queue:消息队列,遵循先进先出原则;
Ack:(Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误;
消息队列框架:消息队列发送的框架,常见的有rabbitmq,metaq,cmq,kafka;
配置中心:不同环境的配置中心对应key一致,但是key对应的值不一致。
参照图1,图1示出了本发明实施例的方法的流程示意图,本发明的实施例的方法包括:发送步骤和接收步骤。
参照图2,图2示出了本发明实施例的发送步骤方法的流程示意图,发送步骤包括:基于业务构建消息模型;对消息模型配置字段参数;采用预置的加解密信息对消息模型进行加密;通过sdk发送加密后的消息模型。在本发明的一些实施例当中,基于业务构建消息模型可以是基于对具体的业务类型,如成员,元素,命令等,具体业务操作类型可以是相加操作,删除操作,更新操作等,具体示例如下:
实例中,针对命令业务构建了一个相加操作的消息模型,并对消息模型配置了环境标识“test-zh”,通过环境标识,使消息能够自动识别匹配消息发送的目标微服务与消息消费的微服务是同一套微服务环境。进一步的,在消息模型搭建好后,采用预置的加解密信息对消息模型进行加密,预置的加密信息是在配置中心中,通过不同的环境标识如“test-zh”能够通过相同的key拉取不同的值,通过拉取到的加密算法和对应的秘钥,对消息模型进行加密,在本发明的一些实施例中,加密算法类型包括RAS加密,DES加密算法,AES加密算法,base64加密算法。可以理解的是,不同的消息的环境标识拉取到的加密算法和加密密钥是不同的,以此保障了消息发送和接收过程中消息的安全性和保密性。进一步的,在对消息模型加密之后,通过发送sdk发送加密后的消息模型,在本发明的一些实施例当中,发送sdk包括:初始化消息队列框架发送实例;配置统一消息发送接口;基于消息队列框架标识对消息模型配置消息队列框架。具体的,在系统发送消息之前,发送sdk实现初始化所有发送消息需要的初始化数据,包括初始化消息框架如rabbitmq框架,cmq框架,metaq框架发送的实例,配置统一消息发送接口,通过获取的配置中心的消息框架标识来确定使用哪种消息框架进行发送消息,如下示例所示:
rabbitmq消息框架标识:mq.message.type=rabbit
Cmq消息框架标识:mq.message.type=cmq
Metaq消息框架标识:mq.message.type=metaq
参照图3,图3示出了本发明实施例的接收步骤方法的流程示意图,接收步骤包括:基于消息队列框架标识初始化消息接收组件;接收消息模型后对消息模型采用预置的加解密信息进行解密;解析并判断消息模型与当前消息接收组件的目标字段参数是否一致;若存在消息模型与当前消息接收组件的目标字段参数一致,则超过预设时间后消息接收组件返回确认信息至发送方。在本发明的一些实施例当中,具体的,接收步骤包括:拉取配置中心的消息队列框架标识进行消息队列接收装置初始化,以此达到通过配置中心的消息队列标识进行消息队列的自由切换,在接收消息之前,系统初始化所有可以接收消费消息需要的初始化数据,如初始化消息框架rabbitmq,cmq,metaq等消息框架的消息消费实例,通过环境标识查找接收消息模型采用的预置加解密信息包括解密类型和解密密钥对消息模型进行解密操作,当消息解密之后,通过消息体定义的数据来确定该消息是否消费并回复ack,只有当消息模型与当前消息接收组件的目标字段参数一致,该消息才会被消费并经过预定时间之后返回ack信息,否则该消息不被消费,将继续轮询发送,消息模型中用于比较的目标字段如图6所示,图6示出了一些具体的实施例当中的字段参数。
参照图4,图4示出了本发明实施例的发送sdk的流程示意图,如图中所示,sdk包括:基于消息队列框架标识初始化消息队列框架发送实例;配置统一消息发送接口,具体的,在系统发送消息之前,发送sdk实现初始化所有发送消息需要的初始化数据,包括初始化消息框架如rabbitmq框架,cmq框架,metaq框架发送的实例,配置统一消息发送接口,通过获取的配置中心的消息框架标识来确定使用哪种消息框架进行发送消息,例如,rabbitmq的消息框架标识是:mq.message.type=rabbit,Cmq的消息框架标识是:mq.message.type=cmq,Metaq的消息框架标识是:mq.message.type=metaq。
在本发明的一些实施例中,加解密信息包括加密算法类型、加密密钥、解密密钥及环境标识,加解密信息能够在配置中心通过相同的key值针对不同的环境标识拉取不同的值,如图7所示,图7示出了一些具体的实施例当中的加解密信息的一些参数示例。
在本发明的一些实施例中,通过消息体定义的数据来确定该消息是否消费并回复ack,只有当消息模型与当前消息接收组件的目标字段参数一致,该消息才会被消费并经过预定时间之后返回ack信息,否则该消息不被消费,将继续轮询发送,消息模型中用于比较的目标字段参数包括环境标识、应用程序ID、业务类型及消息内容,参见图6中消息模型中的目标字段所示。
在本发明的一些实施例中,只有当消息模型与当前消息接收组件的目标字段参数一致,该消息才会被消费并经过预定时间之后返回ack信息,这里预设时间优选为三十分钟。
在本发明的一些实施例中,对于同一个topic和queue,消息被配置为反复轮询发送直至发送方接收到返回的ack确认信息,消息被消费之后为止。
在本发明的一些实施例中,消息队列框架包括但不限于rabbitmq、cmq和metaq。
参照图5,图5示出了本发明实施例的装置的模块示意框图:一种发送和消费MQ消息的装置,包括消息发送模块和消息接收模块,消息发送模块用于构建发送消息模型并对消息模型配置字段参数,采用预置的加解密信息对消息模型进行加密后通过sdk发送;接收模块用于基于消息队列框架标识初始化消息接收组件,接收消息模型后对消息模型采用预置的加解密信息进行解密,解析并判断消息模型与当前消息接收组件的目标字段参数是否一致,若一致,则超过预设时间后返回ack确认信息至发送方,在本发明的一些实施例当中,具体的,消息发送模块用于基于业务构建消息模型可以是基于对具体的业务类型,如成员,元素,命令等,具体业务操作类型可以是相加操作,删除操作,更新操作等。在消息模型搭建好后,采用预置的加解密信息对消息模型进行加密,预置的加密信息是在配置中心中,通过不同的环境标识如“test-zh”能够通过相同的key拉取不同的值,通过拉取到的加密算法和对应的秘钥,对消息模型进行加密,在本发明的一些实施例中,加密算法类型包括RAS加密,DES加密算法,AES加密算法,base64加密算法。可以理解的是,不同的消息的环境标识拉取到的加密算法和加密密钥是不同的,以此保障了消息发送和接收过程中消息的安全性和保密性。进一步的,在对消息模型加密之后,通过sdk发送加密后的消息模型,在本发明的一些实施例当中,sdk包括:基于消息队列框架标识初始化消息队列框架发送实例;配置统一消息发送接口。具体的,在系统发送消息之前,发送sdk实现初始化所有发送消息需要的初始化数据,包括初始化消息框架如rabbitmq框架,cmq框架,metaq框架发送的实例,配置统一消息发送接口,通过获取的配置中心的消息框架标识来确定使用哪种消息框架进行发送消息。
在本发明的一些实施例当中,具体的,消息接收模块用于拉取配置中心的消息队列框架标识进行消息队列接收装置初始化,以此达到通过配置中心的消息队列标识进行消息队列的自由切换,在接收消息之前,系统初始化所有可以接收消费消息需要的初始化数据,如初始化消息框架rabbitmq,cmq,metaq等消息框架的消息消费实例,通过环境标识查找接收消息模型采用的预置加解密信息包括解密类型和解密密钥对消息模型进行解密操作,当消息解密之后,通过消息体定义的数据来确定该消息是否消费并回复ack,只有当消息模型与当前消息接收组件的目标字段参数一致,该消息才会被消费并经过预定时间之后返回ack信息,否则该消息不被消费,将继续轮询发送。
在本发明的一些实施例当中,sdk包括:基于消息队列框架标识初始化消息队列框架发送实例;配置统一消息发送接口,具体的,在系统发送消息之前,发送sdk实现初始化所有发送消息需要的初始化数据,包括初始化消息框架如rabbitmq框架,cmq框架,metaq框架发送的实例,配置统一消息发送接口,通过获取的配置中心的消息框架标识来确定使用哪种消息框架进行发送消息,例如,rabbitmq的消息框架标识是:mq.message.type=rabbit,Cmq的消息框架标识是:mq.message.type=cmq,Metaq的消息框架标识是:mq.message.type=metaq。
在本发明的一些实施例当中,有一种计算机可读存储介质,其上存储有计算机程序,其上的计算机程序被处理器执行时能够实现本发明的技术方案。
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文的例示性具体实施和架构的许多其它修改也处于本公开的范围内。
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。