CN112134938B - 一种消息处理方法、装置、终端及计算机可读存储介质 - Google Patents
一种消息处理方法、装置、终端及计算机可读存储介质 Download PDFInfo
- Publication number
- CN112134938B CN112134938B CN202010941519.5A CN202010941519A CN112134938B CN 112134938 B CN112134938 B CN 112134938B CN 202010941519 A CN202010941519 A CN 202010941519A CN 112134938 B CN112134938 B CN 112134938B
- Authority
- CN
- China
- Prior art keywords
- message
- initial
- original
- data type
- identification information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供一种消息处理方法、装置、终端及计算机可读存储介质,该方法通过获取原始消息,根据原始消息生成原始消息对应的身份识别信息,根据身份识别信息确定原始消息对应的方法和方法数据类型,根据方法数据类型将原始消息转化为过程消息,过程消息的数据类型与方法数据类型相同,根据身份识别信息、过程消息和原始消息对应的方法,生成初始消息,本发明还提供了一种消息处理装置、终端及计算机可读存储介质,根据身份识别信息确定该原始消息对应的方法和方法数据类型,自动对该原始消息进行处理,生成符合需要的初始消息,开发者只需要定义好身份识别信息即可,开发者不需要了解MNS内部代码逻辑,提升了用户体验度。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种消息处理方法、装置、终端及计算机可读存储介质。
背景技术
阿里云消息服务(Message Notification Service,简称MNS)是一种分布式消息服务。MNS能够帮助应用开发者在他们应用的分布式组件上自由的传递数据、通知消息,构建松耦合***。
虽然MNS提供了多语言版本的SDK,但MNS的代码耦合性较高,需要开发者了解MNS内部代码逻辑,用户体验度不高。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种消息处理方法、装置、终端及计算机可读存储介质,用于解决解决MNS的代码耦合性较高,需要开发者了解MNS内部代码逻辑,用户体验度不高的问题。
为实现上述目的及其他相关目的,本发明提供一种消息处理方法,包括:
获取原始消息并生成所述原始消息对应的身份识别信息,所述身份识别信息用于确定所述原始消息所对应的方法和所述原始消息对应的方法数据类型;
根据所述身份识别信息确定所述原始消息对应的方法和方法数据类型;
根据所述原始消息、所述方法数据类型生成过程消息,所述过程消息的数据类型与所述方法数据类型相同;
根据所述身份识别信息、所述过程消息和所述原始消息对应的方法,生成初始消息。
可选的,还包括以下至少之一:
根据所述身份识别信息创建所述初始消息对应的主题代理和队列代理,通过所述主题代理和队列代理将所述初始信息发送给云服务;
根据所述原始消息生成对应的Mock数据,发送所述Mock数据。
可选的,还包括:
生成所述初始消息对应的全局追踪编号;
获取所述初始消息对应的来源服务名称;
将所述全局追踪编号、所述云消息服务器名称和所述初始消息记录到消息追踪日志。
可选的,还包括:
获取所述初始消息,所述初始消息包括身份识别信息;
根据所述身份识别信息确定所述初始消息对应的方法和方法数据类型;
根据所述初始消息、所述方法数据类型生成中间消息,所述中间消息的数据类型与所述方法数据类型相同;
根据所述中间消息和所述初始消息对应的方法,生成目标消息。
可选的,还包括:
若干个消息接收消费者分别获取若干条初始消息;
若存在一个消息接收消费者获取到的所述初始消息包括空消息,其余各所述消息接收消费者暂停获取所述初始消息;
获取到空消息的所述消息接收消费者为目标消息接收消费者,暂停获取所述初始消息的消息接收消费者为空闲消息接收消费者;
所述目标消息接收消费者根据预设时间间隔继续获取所述初始消息;
若所述初始消息不为空消息,所述空闲消息接收消费者继续获取所述初始消息。
可选的,所述目标消息包括结果类型,所述结果类型原始消息对应的方法包括以下任意之一:
删除所述目标消息;
重新执行所述初始原始消息对应的方法;
执行成功。
可选的,还包括:
若所述目标消息的结果类型包括执行成功,对所述目标消息进行加密;
根据所述身份识别信息将加密后的所述目标消息分发至对应的消息订阅者。
本发明还提供了一种消息处理装置,包括:
原始消息获取模块,用于获取原始消息并生成所述原始消息对应的身份识别信息,所述身份识别信息用于确定所述原始消息所对应的方法和所述原始消息对应的方法数据类型;
第一确定模块,用于根据所述身份识别信息确定所述原始消息对应的方法和方法数据类型;
过程消息生成模块,用于根据所述原始消息、所述方法数据类型生成过程消息,所述过程消息的数据类型与所述方法数据类型相同;
初始消息生成模块,用于根据所述身份识别信息、所述过程消息和所述原始消息对应的方法,生成初始消息。
本发明还提供了一种终端,包括处理器、存储器和通信总线;
所述通信总线用于将所述处理器和存储器连接;
所述处理器用于执行所述存储器中存储的计算机程序,以实现上述各实施例中一个或多个所述的消息处理方法。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,
所述计算机程序用于使所述计算机执行如上述任一项所述的消息处理方法。
如上所述,本发明提供的一种消息处理方法、装置、终端及计算机可读存储介质,具有以下有益效果:
通过获取原始消息,根据原始消息生成原始消息对应的身份识别信息,根据身份识别信息确定原始消息对应的方法和方法数据类型,根据方法数据类型将原始消息转化为过程消息,过程消息的数据类型与方法数据类型相同,根据身份识别信息、过程消息和原始消息对应的方法,生成初始消息。根据身份识别信息确定该原始消息对应的方法和方法数据类型,自动对该原始消息进行处理,生成符合需要的初始消息,开发者只需要定义好身份识别信息即可,基于该身份识别信息可以自动将该原始消息转化为对应的初始消息,开发者不需要了解MNS内部代码逻辑,提升了用户体验度。
附图说明
图1为本发明实施例一提供的消息处理方法的一种流程示意图;
图2为本发明实施例一提供的消息处理方法的另一种流程示意图;
图3为本发明实施例一提供的消息处理方法的另一种流程示意图;
图4为本发明实施例二提供的消息处理装置的一种结构示意图;
图5为本发明实施例二提供的消息处理装置的另一种结构示意图;
图6为本发明实施例三提供的消息处理装置的一种结构示意图;
图7为本发明实施例三提供的消息处理方法的一种具体的流程示意图;
图8为本发明实施例三提供的消息处理方法的另一种具体的流程示意图;
图9为本发明实施例三提供的消息处理方法的另一种具体的流程示意图;
图10为本发明实施例三提供的终端的一种结构示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
实施例一
请参阅图1,本发明实施例提供一种消息处理方法,包括:
S101:获取原始消息并生成原始消息对应的身份识别信息;
S102:根据身份识别信息确定原始消息对应的方法和方法数据类型;
S103:根据原始消息、方法数据类型生成过程消息;
S104:根据身份识别信息、过程消息和原始消息对应的方法,生成初始消息。
需要说明的是,身份识别信息用于确定原始消息所对应的方法和原始消息对应的方法数据类型,过程消息的数据类型与方法数据类型相同。
在一些实施例中,该消息处理方法应用于阿里云消息服务(MNS)。该初始消息后续将发送至阿里云MNS消息服务。
在一些实施例中,原始消息包括但不限于开发者所撰写的针对于分布式组件的数据、通知消息等。
在一些实施例中,将身份识别信息封装在初始消息中。
在一些实施例中,身份识别信息包括以下至少之一:内容(Content)、标签(Tag)等。
在一些实施例中,内容包括消息内容。
在一些实施例中,标签包括但不限于以下至少之一:开发人员自定义的注解、消息内容的一部分等。
需要说明的是,每一个标签分别对应唯一的一种方法。
在一些实施例中,可以通过预先设置好各标签(Tag)与方法(Method)和方法数据类型的映射关系,基于该映射关系,即可根据标签(Tag)确定该初始消息对应的方法和方法数据类型。在一些实施例中,具有映射关系的方法Method和标签Tag均对应于同一种数据结构。
在一些实施例中,具有相同身份识别信息的各原始消息的数据结构均相同。
在一些实施例中,该消息处理方法还包括:将初始消息发送给阿里云服务MNS。
在一些实施例中,通过自定义扩展Tag字段,细化处理方法,直接通过原始消息的tag来获取原始消息所对应的方法和方法数据类型,根据该原始消息对应的方法对该原始消息进行相应的处理,生成需要的初始消息,获取当前来源服务名称,将Tag字段和来源服务名称等封装到初始消息中,再将该初始消息发送给阿里云消息服务MNS,可以细化同一队列不同业务场景消息,分别执行对应的方法,节省队列数量,高效利用单队列多消息优势。
通过在原始消息的基础上,将身份识别信息与原始消息进行封装,可以细化同一队列不同业务场景消息,分别执行不同的发送处理器方法,节省队列数量,高效利用单队列多消息优势。
在一些实施例中,该消息发送方法还包括:
生成初始消息对应的全局追踪编号;
获取初始消息对应的来源服务名称;
将全局追踪编号、来源服务名称和初始消息记录到消息追踪日志。
在一些实施例中,该消息发送方法还包括:将全局追踪编号与来源服务名称封装到初始消息中。
需要说明的是,来源服务名称包括发送该初始消息所的服务的名称。在一些实施例中,将全局追踪编号(GlobalTraceId)与来源服务名称(ServiceName)增加到初始消息中,可以使得该初始消息即便经处理转化为目标消息后,该目标消息也仍然包括全局追踪编号,这样,在目标消息在继续被分发给对应的消息订阅者后,仍然能够被追踪到该目标消息的具体分发对象,进而可以实现全局消息链路追踪。
需要说明的是,全局追踪编号(GlobalTraceId),一次调用全局唯一。
需要说明的是,来源服务名称(refServiceName)可以用于告知下游服务。
在一些实施例中,通过自定义扩展全局追踪编号GlobalTraceId和来源服务名称refServiceName三个字段,增加到初始消息中,同时记录到消息追踪日志中,直接可用该消息追中日志分析展示该初始消息的链路关系。
在一些实施例中,还可以通过全局追踪编号GlobalTraceId实现将初始消息与HTTP请求/异步线程/SQL混合追踪。
在一些实施例中,初始消息中还封装有身份识别信息、全局消息编号GlobalTraceId,。
在一些实施例中,初始消息中除身份识别信息、全局消息编号GlobalTraceId,外还封装有来源服务名称RefServiceName。
在一些实施例中,该消息处理方法包括:
根据身份识别信息创建初始消息对应的主题代理和队列代理;
通过主题代理和队列代理将初始信息发送给云服务。
在一些实施例中,云服务包括阿里云消息服务MNS。
需要说明的是,同一个队列可以多次订阅不同的主题,同一个队列的不同fiter也可以多次订阅相同的主题,在此不做限定。
在一些实施例中,当任意一条原始消息消息匹配不到对应的方法Method时,该原始消息将被自动删除。
在一些实施例中,当原始消息经主题代理和队列代理匹配不到对应的方法Method时,将该原始消息删除。可选的,在原始消息删除后,向原始消息生成端发送消息删除通知。
在一些实施例中,若存在身份识别信息Tag相同,但数据结构不同的若干条原始消息时,则该Tag对应的方法Method仅处理与该方法Method对应的数据结构的原始消息,对其他数据结构的原始消息不进行处理。可选的,当发现存在同一Tag的不同数据结构的原始消息时,对不进行处理的原始消息的原始消息发送端发送消息处理失败通知。在一些实施例中,该消息处理方法还包括:
根据所述原始消息生成对应的Mock数据;
发送所述Mock数据。
其中,该Mock数据将发还至发送原始消息的消息发送方。
通过生成对应的Mock数据,本实施例所提供的消息处理方法可以实现多环境支持,只需配置环境后缀即可,自动切换不同环境队列和主题,同时额外支持Mock功能,解境决封闭无网络开发环。
请参阅图2,该消息处理方法还包括:
S201:获取初始消息;
S202:根据身份识别信息确定初始消息对应的方法和方法数据类型;
S203:根据初始消息、方法数据类型生成中间消息;
S204:根据中间消息和初始消息对应的方法,生成目标消息。
需要说明的是,该初始消息包括是由上述任意一个实施例所提供的消息处理方法所生成的,因此该初始消息自身包括身份识别信息、全局追踪编号等信息。
在一些实施例中,该消息处理方法应用于阿里云消息服务(MNS)。该初始消息包括从MNS消息服务获取的消息。
在一些实施例中,该消息处理方法还包括:
获取初始消息对应的全局追踪编号;
获取初始消息对应的来源服务名称;
将初始消息、全局追踪编号和来源服务名称记录到消息追踪日志。
在一些实施例中,由于全局追踪编号与来源服务名称封装在初始消息中,因此可以根据初始消息直接得到全局追踪编号与来源服务名称。
需要说明的是,来源服务名称包括该初始消息所被获取的服务的名称。
在一些实施例中,目标消息包括结果类型,结果类型原始消息对应的方法包括以下任意之一:
删除目标消息;
重新执行初始原始消息对应的方法;
执行成功。
需要说明的是,当目标消息的结果类型包括删除目标消息,则在生成目标消息之后,还包括:将该目标消息删除。
需要说明的是,当目标消息的结果类型包括重新执行初始原始消息对应的方法,则在生成目标消息之后,还包括:将该目标消息重新执行初始原始消息对应的方法。通过对目标消息增加结果类型,可以实现根据结果类型自动对某些需要删除或者需要重试的消息进行处理,不再依赖于技术人员手动筛选选择,提升了工作效率和用户体验度。
在一些实施例中,该消息处理方法还包括:
若目标消息的结果类型包括执行成功,根据身份识别信息将目标消息分发至对应的消息订阅者。
在一些实施例中,该消息处理方法还包括:
若目标消息的结果类型包括执行成功,对目标消息进行加密;
根据身份识别信息将加密后的目标消息分发至对应的消息订阅者。
在一些实施例中,由于初始消息中封装有全局追踪编号(GlobalTraceId)与来源服务名称(ServiceName),可以使得该初始消息即便经处理转化为目标消息后,该目标消息也仍然包括全局追踪编号,这样,在目标消息在继续被分发给对应的消息订阅者后,仍然能够被追踪到该目标消息的具体分发对象,进而可以实现全局消息链路追踪。
在一些实施例中,获取初始消息之后,该消息处理方法还包括:
生成该初始消息所对应的当前消息追踪编号;
将当前消息追踪编号记录到消息追踪日志。
其中,当前消息追踪编号(TraceId)是每次获取到初始消息后,该初始消息的唯一标识。
在一些实施例中,通过来源服务名称refServiceName和在发送初始消息到MNS前就自定义扩展全局追踪编号GlobalTraceId,以及根据该初始消息生成的当前消息追踪编号TraceId记录到消息追踪日志中,可以实现基于全局追踪编号GlobalTraceId在消息追踪日志中分析该消息的链路关系。在一些实施例中,还可以通过全局追踪编号GlobalTraceId实现将初始消息与HTTP请求/异步线程/SQL混合追踪。
在一些实施例中,通过自定义扩展tag字段,细化处理方法,分发前直接通过tag获取初始消息所对应的方法,对该初始消息进行对应的处理,生成需要的目标消息,再分发给对应的消息订阅者。需要说明的是,初始消息的身份识别信息对应的方法可以由本领域技术人员预先设置,用于将初始消息转化为其分发时所需要的目标消息。
在一些实施例中,根据方法数据类型将初始消息转化为中间消息包括:将初始消息自动反序列化为相应的数据类型。
在一些实施例中,中间消息执行方法,生成目标消息包括:将该中间消息反射执行该方法,生成目标消息。
在一些实施例中,根据所述身份识别信息将所述目标消息分发至对应的消息订阅者包括:将目标消息交由业务层(Service),由业务层将该目标消息分发至对应的消息订阅者。
在一些实施例中,该消息处理方法还包括:
若干个消息接收消费者分别获取若干条初始消息;
若存在一个消息接收消费者获取到的初始消息包括空消息,其余各消息接收消费者暂停获取初始消息。
在一些实施例中,该消息处理方法还包括:
获取到空消息的消息接收消费者为目标消息接收消费者,暂停获取初始消息的消息接收消费者为空闲消息接收消费者;
目标消息接收消费者根据预设时间间隔继续获取初始消息;
若初始消息不为空消息,空闲消息接收消费者继续获取初始消息。
在一些实施例中,由若干个消息接收消费者通过长轮询的方式分别获取初始消息,当其中一个消息接收消费者(目标消息接收消费者)所获取的初始消息包括空消息时(也即当其中一个消息接收消费者没有拉取到初始消息时),只保留一个线程拉取初始消其余线程等待(通知其余消息接收消费者(空闲消息接收消费者)暂停获取初始消息,该目标消息接收消费者继续根据预设时间间隔获取初始消息),当有最新消息时再激活等待线程(当该目标消息接收消费者重新获取到不为空的初始消息时),再通知各空闲消息接收消费者继续获取初始消息,这样可以节省***资源和避免QPS(Query Per Second,每秒查询率)浪费。
在一些实施例中,当消息订阅者包括HTTP API,为保证HTTP API的数据安全,提供了对目标消息进行加密的功能,HTTP API只需根据约定好的密钥验证签名内容即可,提升了消息传输的安全性。
在一些实施例中,对目标消息通过非对称的方法进行加密。
请参阅图3,下面通过一种具体的消息处理方法进行示例性说明,该具体的消息处理方法包括:
S301:获取原始消息并生成原始消息对应的身份识别信息。
在一些实施例中,身份识别信息用于确定原始消息所对应的方法和原始消息对应的方法数据类型。
在一些实施例中,原始消息对应的方法是由本领域技术人员所预先设置的,用于将的原始消息转化为符合要求的初始消息,可以发送至MNS中。
通过原始消息对应的方法将原始消息转化为初始消息,开发人员可以不用再明确知晓MNS内部的代码逻辑,只需要按照正常编码方式进行编码,将编码后的原始消息经过原始消息对应的方法进行转化,则可符合提交到MNS的格式要求。
S302:根据身份识别信息确定原始消息对应的方法和方法数据类型;
S303:根据方法数据类型、原始消息生成过程消息;
需要说明的是,过程消息的数据类型与方法数据类型相同;
S304:根据过程消息和原始消息对应的方法,生成初始消息;
在一些实施例中,过程消息执行原始消息对应的方法,生成初始消息。
在一些实施例中,身份识别信息封装在初始消息中。
S305:将初始消息发送至云服务;
S306:从云服务获取初始消息。
需要说明的是,初始消息包括身份识别信息、来源服务名称和全局追踪编号GlobalTraceId。
S307:根据身份识别信息确定初始消息对应的方法和方法数据类型;
S308:根据方法数据类型、初始消息生成中间消息,中间消息的数据类型与方法数据类型相同;
S309:根据中间消息和初始消息对应的方法,生成目标消息;
在一些实施例中,中间消息执行初始消息对应的方法,生成目标消息;
S310:根据身份识别信息将目标消息分发至对应的消息订阅者。
本发明实施例公开了一种消息处理方法,包括获取原始消息,根据原始消息生成原始消息对应的身份识别信息,根据身份识别信息确定原始消息对应的方法和方法数据类型;根据方法数据类型将原始消息转化为过程消息,过程消息的数据类型与方法数据类型相同;根据过程消息和原始消息对应的方法,生成初始消息。根据身份识别信息确定该原始消息对应的方法和方法数据类型,自动对该原始消息进行处理,生成符合需要的初始消息,开发者只需要定义好身份识别信息即可,基于该身份识别信息可以自动将该原始消息转化为对应的初始消息,开发者不需要了解MNS内部代码逻辑,提升了用户体验度。
可选的,该消息处理方法还包括获取初始消息,该初始消息包括身份识别信息,根据身份识别信息确定该初始消息对应的方法和方法数据类型,根据该方法数据类型将初始消息转化为中间消息,中间消息执行该初始消息对应的方法生成目标消息。根据初始消息的身份识别信息确定该初始消息对应的方法和方法数据类型,自动对该初始消息进行处理,生成符合需要的目标消息,开发者只需要定义好身份识别信息即可,基于该身份识别信息可以自动将该初始消息转化为对应的目标消息,开发者不需要了解MNS内部代码逻辑,提升了用户体验度。
可选的,通过提取初始消息对应的全局追踪编号、来源服务名称、当前消息追踪编号,将全局追踪编号、来源服务名称、当前消息追踪编号及初始消息记录到消息追踪日志中,可以实现全局链路追踪。
可选的,通过由若干个消息接收消费者分别获取初始消息,若存在一个消息接收消费者获取到的初始消息包括空消息,其余各消息接收消费者暂停获取初始消息,若该获取到空消息的消息接收消费者继续获取的初始消息不再为空消息时,其余各消息接收消费者再继续获取初始消息,通过长轮询拉取消息,当无消息时,只保留一个线程拉取消息,其余线程等待,当有最新消息时再激活等待线程,可节省***资源和避免QPS浪费。
可选的,通过对目标消息进行加密,可以为保证消息订阅者的数据安全,订阅者只需根据约定好的密钥验证签名内容即可。
实施例二
请参阅图4,本发明实施例提供一种消息处理装置400,包括:
原始消息获取模块401,用于获取原始消息并生成原始消息对应的身份识别信息,身份识别信息用于确定原始消息所对应的方法和原始消息对应的方法数据类型;
第一确定模块402,用于根据身份识别信息确定原始消息对应的方法和方法数据类型;
过程消息生成模块403,用于根据原始消息、方法数据类型生成过程消息,过程消息的数据类型与方法数据类型相同;
初始消息生成模块404,用于根据过程消息和原始消息对应的方法,生成初始消息。
在一些实施例中,请参阅图5,该消息处理装置400,还包括:
初始消息获取模块501,用于获取初始消息,初始消息包括身份识别信息;
第二确定模块502,用于根据身份识别信息确定初始消息对应的方法和方法数据类型;
中间消息生成模块503,用于根据方法数据类型、初始消息生成中间消息,中间消息的数据类型与方法数据类型相同;
目标消息生成模块504,用于根据中间消息和初始消息对应的方法,生成目标消息。
在本实施例中,该消息处理装置实质上是设置了多个模块用以执行上述实施例一的消息处理方法,具体功能和技术效果参照上述实施例一即可,此处不再赘述。
实施例三
下面通过一个具体的实施例对本发明实施例所提供的消息处理装置及消息处理方法进行示例性的说明。
请参阅图6,图6为一种具体的消息处理装置的结构示意图,该消息处理装置600包括Tag映射服务器Mapping 603,消息发送器MnsSender 604,Mock发送器MockSender 605,代理Proxy 606,队列代理发送器QueueProxySender 607,主题代理服务器TopicProxySender608,若干个消息接收消费者Consumer 609,消息分发器Dispatcher610,消息接收处理器MnsController 611,应用层Service 612,消息追踪日志613。该***应用于阿里云消息服务时,继续参见图6,该***还与阿里云消息服务中的以下组件进行消息交互:阿里云消息服务MNS601,MNS SDK 602。
结合上述具体的***实例,以下提供一种具体的消息处理方法,应用于初始消息接收端,参见图7:
S701:获取初始消息;
S702:根据身份识别信息确定初始消息对应的方法和方法数据类型;
S703:提取初始消息对应的全局追踪编号;
S704:获取初始消息对应的来源服务名称;
S705:生成当前消息追踪编号;
S706:将全局追踪编号、来源服务名称、当前消息追踪编号和初始消息记录到消息追踪日志;
S707:根据方法数据类型将初始消息转化为中间消息;
S708:中间消息执行方法,生成目标消息;
需要说明的是,目标消息包括结果类型,其中,结果类型包括执行成功SUCCESS或者执行失败FAIL,其中,执行失败FAIL包括删除所述目标消息IGNORE和重新执行所述初始消息对应的方法RETRY。
S709:若结果类型包括执行成功,对目标消息进行加密;
S710:根据身份识别信息将加密后的目标消息分发至对应的消息订阅者。
在一些实施例中,初始消息由Consummer来获取,每一个Consummer运行在一个独立的线程,主要负责长轮询拉取消息。当拉取到空消息时,把消息空闲的标记置位当前队列名称,便于通知其余Consumer不再去消息服务器拉取消息,等待当前锁对象,而当一旦拉取到新消息后,则去掉消息空闲标记,其余等待锁对象的Consumer全部唤醒,都去消息服务器拉取消息,以此类推,只要任意Consumer发现没有消息就会立即通知其余Consumer暂停拉取,从而达到高效并发和减少消息请求QPS目的。拉取到初始消息后,Dispachter消息分发器会提取该初始消息的身份识别信息tag,经Tag映射服务器Mapping 603确定初始消息对应的方法和方法数据类型,根据该方法数据类型和初始消息对应的方法对该初始消息进行处理,生成目标消息,此时该目标消息包括结果类型,将该目标消息交由Dispatcher分发器去处理,Dispatcher分发器根据目标消息的结果类型判断是否删除当前初始消息、是否重新执行所述初始消息对应的方法,或是将该目标消息分发至对应的消息订阅者在一些实施例中,Dispachter消息分发器首先解析初始消息,提取初始消息的Tag,Content,GlobalTraceId,TraceId,RefServiceName等关键内容,记录到消息追踪日志,然后根据预设Tag-Method映射关系,将初始消息分发到对应的消息接收处理器MnsController,并为该初始消息匹配其所对应的Method方法数据类型,将该初始消息自动反序列化为相应的数据类型,反射执行Method,将生成的结果类型包括执行成功的目标消息交由Service业务层处理。每一个tag实质对应到MnsController的每一个方法。
结合上述图6所示的具体的***实例,以下提供一种具体的消息处理方法,应用于初始消息发送端,参见图8:
S801:获取原始消息;
S802:根据原始消息生成原始消息对应的身份识别信息;
S803:根据身份识别信息确定原始消息对应的方法和方法数据类型;
S804:根据方法数据类型将原始消息转化为过程消息;
S805:过程消息执行原始消息对应的方法,生成初始消息;
S806:生成初始消息对应的全局追踪编号;
S807:获取初始消息对应的来源服务名称;
S808:将全局追踪编号、来源服务名称和将初始消息记录到消息追踪日志;
S809:跟据身份识别信息创建初始消息对应的主题代理和队列代理;
S810:通过主题代理和队列代理将初始信息发送给阿里云消息服务。
在一些实施例中,初始消息中封装有身份识别信息、全局消息编号GlobalTraceId。
在一些实施例中,Service业务层直接执行消息发送器MnsSender注解的Sender消息发送器。具体的,消息发送器MnsSender在启动的时候会被扫描器扫描,根据其身份识别信息(例如tag),自动生成相应的代理类,注册到SenderRegistry注册表。Mock发送器MockSender也是在此时根据配置自动生成的,它时一个本地模拟的Sender,任然会返回伪造的数据,但是并不会真正的请求消息服务器。代理类在执行时会根据Mapping映射关系和SenderRegistry注册表自动选择,然后封装为统一的数据结构的初始消息,最后发送给MNS。
下面通过一个具体的示例来示例性的说明,本发明实施例中的消息处理方法的一种具体的实现方式,参见图9,其中,Filter为阿里云消息服务MNS的内置功能,用于过滤Topic发送到指定订阅关系的队列。同一个队列可以不同Filter多次订阅同一个Topic,如Queue_2所示。在保证Tag唯一性的前提下,同一个队列也可以多次订阅不同的个Topic。Tag为组件衍生扩展的功能,用于同一个队列不同的消息内容分发到不同的执行方法(Method),在一些实施例中,Tag也可以是消息内容的一部分。其中,当任意一条初始消息或原始消息匹配不到对应的方法Method时,该消息将被自动删除,如图9中的Tag_3所示。若存在身份识别信息Tag相同,但数据结构不同的若干条消息时,则该Tag对应的方法Method仅处理与该方法Method对应的数据结构的消息,对其他数据结构的消息不进行处理。在一些实施例中,因对同一个Tag调用相同的方法,由于该消息实际内容(数据结构)与其所包括的Tag所应的内容(数据结构)不一致,会出错,如图9中的Tag_5所示。
通过本发明实施例所提供的消息处理方法,可以实现:
1、每个主题代理和队列代理可单独设置线程数,资源隔离,高自由度配置,可实现高并发和低并发队列并存互不影响。
2、长轮询拉取消息,当无消息时,只保留一个消息接收消费者所在的线程拉取消息,其余消息接收消费者所在的线程等待,当有最新消息时再激活处于等待线程状态的消息接收消费者,可节省***资源和避免QPS浪费。
3、在初始消息内容的基础上还对应生成了包括身份识别信息、全局追踪编号以及当前消息追踪编号,根据上述身份识别信息细化同一队列不同业务场景消息,分别执行不同的初始消息对应的方法和原始消息对应的方法,节省队列数量,高效利用单队列多消息优势。
4、多环境支持,只需配置环境后缀即可,自动切换不同环境队列和主题,同时额外支持Mock功能,解境决封闭无网络开发环。
5、丰富复杂的异常处理策略,支持指定任意异常类型,同时对生成的目标消息增加了结果类型标签,使得可以实现自动对目标消息进行删除目标消息或重新执行初始原始消息对应的方法等操作,不再依赖于技术人员手动操作,减少了技术人员的工作量。
6、通过配置全局追踪编号以支持全局链路追踪,不仅限于消息,亦可与HTTP请求/异步线程/SQL混合追踪。
7、部分主题消息订阅者为HTTP API,为保证这类订阅者的数据安全,提供了自动消息非对称加密功能,订阅者只需根据约定好的密钥验证签名内容即可。
8、统一通过身份识别信息的配置,例如通过自定义扩展tag字段,细化处理方法,启动时扫描提前发现和注册到注册器中,分发和发送时直接通过tag获取相应的处理方法
9、通过自定义扩展全局消息编号GlobalTraceId,当前消息编号TraceId和来源服务名称RefServiceName,传递给消息消费者,同时记录入消息追踪日志,直接可通过消息追踪日志分析展示链路关系。
参见图10,本发明实施例还提供了一种终端1000,包括处理器1001、存储器1002和通信总线1003;
通信总线1003用于将处理器1001和存储器连接1002;
处理器1001用于执行存储器1002中存储的计算机程序,以实现如上述实施例一中的一个或多个的消息处理方法。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请各实施例的消息处理方法所包含步骤的指令(instructions)。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序用于使所述计算机执行如实施例一中一个或多个所述的消息处理方法。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
Claims (10)
1.一种消息处理方法,其特征在于,包括:
获取原始消息并生成所述原始消息对应的身份识别信息,所述身份识别信息用于确定所述原始消息所对应的方法和所述原始消息对应的方法数据类型;
根据所述身份识别信息确定所述原始消息对应的方法和方法数据类型;
根据所述原始消息、所述方法数据类型生成过程消息,所述过程消息的数据类型与所述方法数据类型相同;
根据所述身份识别信息、所述过程消息和所述原始消息对应的方法,生成初始消息。
2.根据权利要求1所述的消息处理方法,其特征在于,还包括以下至少之一:
根据所述身份识别信息创建所述初始消息对应的主题代理和队列代理,通过所述主题代理和队列代理将所述初始消息发送给云服务;
根据所述原始消息生成对应的Mock数据,发送所述Mock数据。
3.根据权利要求1所述的消息处理方法,其特征在于,还包括:
生成所述初始消息对应的全局追踪编号;
获取所述初始消息对应的来源服务名称;
将所述全局追踪编号、所述来源服务名称和所述初始消息记录到消息追踪日志。
4.根据权利要求1-3任一项所述的消息处理方法,其特征在于,还包括:
将所述初始消息发送至阿里云消息服务;
通过消息接收消费者从所述阿里云消息服务获取所述初始消息,所述初始消息包括身份识别信息;
根据所述身份识别信息确定所述初始消息对应的方法和方法数据类型;
根据所述初始消息、所述方法数据类型生成中间消息,所述中间消息的数据类型与所述方法数据类型相同;
根据所述中间消息和所述初始消息对应的方法,生成目标消息。
5.根据权利要求4所述的消息处理方法,其特征在于,还包括:
若干个消息接收消费者分别获取若干条初始消息;
若存在一个消息接收消费者获取到的所述初始消息包括空消息,其余各所述消息接收消费者暂停获取所述初始消息;
获取到空消息的所述消息接收消费者为目标消息接收消费者,暂停获取所述初始消息的消息接收消费者为空闲消息接收消费者;
所述目标消息接收消费者根据预设时间间隔继续获取所述初始消息;
若所述初始消息不为空消息,所述空闲消息接收消费者继续获取所述初始消息。
6.根据权利要求4所述的消息处理方法,其特征在于,所述目标消息包括结果类型,所述结果类型包括以下任意之一:
删除所述目标消息;
重新执行所述初始消息对应的方法;
执行成功。
7.根据权利要求6所述的消息处理方法,其特征在于,还包括:
若所述目标消息的结果类型包括执行成功,对所述目标消息进行加密;
根据所述身份识别信息将加密后的所述目标消息分发至对应的消息订阅者。
8.一种消息处理装置,其特征在于,包括:
原始消息获取模块,用于获取原始消息并生成所述原始消息对应的身份识别信息,所述身份识别信息用于确定所述原始消息所对应的方法和所述原始消息对应的方法数据类型;
第一确定模块,用于根据所述身份识别信息确定所述原始消息对应的方法和方法数据类型;
过程消息生成模块,用于根据所述原始消息、所述方法数据类型生成过程消息,所述过程消息的数据类型与所述方法数据类型相同;
初始消息生成模块,用于根据所述身份识别信息、所述过程消息和所述原始消息对应的方法,生成初始消息。
9.一种终端,其特征在于,包括处理器、存储器和通信总线;
所述通信总线用于将所述处理器和存储器连接;
所述处理器用于执行所述存储器中存储的计算机程序,以实现如权利要求1-7中一个或多个所述的消息处理方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,
所述计算机程序用于使所述计算机执行如权利要求1-7中任一项所述的消息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010941519.5A CN112134938B (zh) | 2020-09-09 | 2020-09-09 | 一种消息处理方法、装置、终端及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010941519.5A CN112134938B (zh) | 2020-09-09 | 2020-09-09 | 一种消息处理方法、装置、终端及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112134938A CN112134938A (zh) | 2020-12-25 |
CN112134938B true CN112134938B (zh) | 2022-08-26 |
Family
ID=73845308
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010941519.5A Active CN112134938B (zh) | 2020-09-09 | 2020-09-09 | 一种消息处理方法、装置、终端及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112134938B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112882846B (zh) * | 2021-02-19 | 2024-02-09 | 深圳市云网万店科技有限公司 | 消息队列的数据处理方法、装置、计算机设备和存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103534988A (zh) * | 2013-06-03 | 2014-01-22 | 华为技术有限公司 | 消息发布与订阅的方法及装置 |
US9813363B1 (en) * | 2013-10-21 | 2017-11-07 | West Corporation | Providing data messaging support by intercepting and processing received short message service (SMS) messages at a customer support service |
CN108920144A (zh) * | 2017-04-11 | 2018-11-30 | 北京京东尚科信息技术有限公司 | 一种消息处理方法和装置 |
CN109857572A (zh) * | 2018-12-29 | 2019-06-07 | 北京百度网讯科技有限公司 | 实现远程调用的方法、装置、设备及计算机可读存储介质 |
CN110602194A (zh) * | 2019-09-02 | 2019-12-20 | 深圳市丰润达科技有限公司 | Iot消息的订阅方法、装置及计算机可读存储介质 |
CN110968431A (zh) * | 2018-09-28 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 一种消息处理方法、装置及设备 |
CN111031135A (zh) * | 2019-12-17 | 2020-04-17 | 金瓜子科技发展(北京)有限公司 | 消息传送方法、装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107659380A (zh) * | 2017-09-05 | 2018-02-02 | 上海歌尔泰克机器人有限公司 | 消息发送、消息读取方法、设备及*** |
-
2020
- 2020-09-09 CN CN202010941519.5A patent/CN112134938B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103534988A (zh) * | 2013-06-03 | 2014-01-22 | 华为技术有限公司 | 消息发布与订阅的方法及装置 |
US9813363B1 (en) * | 2013-10-21 | 2017-11-07 | West Corporation | Providing data messaging support by intercepting and processing received short message service (SMS) messages at a customer support service |
CN108920144A (zh) * | 2017-04-11 | 2018-11-30 | 北京京东尚科信息技术有限公司 | 一种消息处理方法和装置 |
CN110968431A (zh) * | 2018-09-28 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 一种消息处理方法、装置及设备 |
CN109857572A (zh) * | 2018-12-29 | 2019-06-07 | 北京百度网讯科技有限公司 | 实现远程调用的方法、装置、设备及计算机可读存储介质 |
CN110602194A (zh) * | 2019-09-02 | 2019-12-20 | 深圳市丰润达科技有限公司 | Iot消息的订阅方法、装置及计算机可读存储介质 |
CN111031135A (zh) * | 2019-12-17 | 2020-04-17 | 金瓜子科技发展(北京)有限公司 | 消息传送方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112134938A (zh) | 2020-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112114979B (zh) | 远程过程调用方法和装置 | |
US9244817B2 (en) | Remote debugging in a cloud computing environment | |
CN109995801B (zh) | 一种消息传输方法和装置 | |
US11221981B2 (en) | Asynchronous channel based bus architecture enabling decoupled services | |
US20070118842A1 (en) | DDS-assisted CORBA discovery | |
WO2023246398A1 (zh) | 云服务实现方法及装置 | |
US10133696B1 (en) | Bridge, an asynchronous channel based bus, and a message broker to provide asynchronous communication | |
CN112835632B (zh) | 一种端能力的调用方法、设备和计算机存储介质 | |
CN112134938B (zh) | 一种消息处理方法、装置、终端及计算机可读存储介质 | |
CN114629904B (zh) | 一种分布式事件的处理方法、***、设备及介质 | |
CN113778714B (zh) | 一种Linux兼容Android的共享剪切板方法及装置 | |
US20220245080A1 (en) | Method for communication of a componentized application, computing device and computer storage medium | |
CN112689020B (zh) | 一种消息传输方法、消息中间件、电子设备及存储介质 | |
KR100833494B1 (ko) | 임베디드 단말의 OSGi 미들웨어 환경에서 이원화된애플리케이션 관리를 통한 애플리케이션 경량화를 위한장치 및 그 방법 | |
CN115225482B (zh) | 一种基于Kubernetes进行Pod容器网络配置的方法及装置 | |
CN114721743B (zh) | 任务执行方法、装置和电子设备 | |
CN113296898B (zh) | 异步任务处理方法、装置、电子设备和存储介质 | |
CN115391288A (zh) | 一种车端数据记录方法及装置、电子设备和计算机可读存储介质 | |
CN110262912B (zh) | 一种过程调用gRPC的调用方法及装置 | |
CN113760487A (zh) | 一种业务处理方法和装置 | |
US9052973B2 (en) | Inter-process communication mechanism | |
CN113965628B (zh) | 消息调度方法、服务器和存储介质 | |
CN116244099B (zh) | 嵌入式***内进程通讯方法、装置、电子设备和存储介质 | |
CN114866541B (zh) | 一种数据传输方法、装置及*** | |
CN117076160B (zh) | 组件调用方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |