一种基于Netty和Nacos的分布式通知方法与流程
未命名
09-24
阅读:97
评论:0

一种基于netty和nacos的分布式通知方法
技术领域
1.本发明属于分布式通信系统技术领域,具体涉及一种基于netty和nacos的分布式通知方法。
背景技术:
2.一个大型复杂软件一般是由几十个几百个微服务组合而成,系统中的各个微服务可被独立部署,各个微服务之间是松耦合的,每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。在这样的分布式系统中存在各种同步异步消息的处理,需要第三方中间件的维护工作,会造成网络压力大、网络请求缓慢的问题。
技术实现要素:
3.本发明要解决的技术问题是克服现有的缺陷,提供一种基于netty和nacos的分布式通知方法,以解决上述背景技术中网络压力大、页面请求缓慢的的问题。
4.为实现上述目的,本发明提供如下技术方案:一种基于netty和nacos的分布式通知方法,包括以下步骤:
5.步骤一,定义待推送的消息体,创建针对待推送的消息体的通知分发服务任务;
6.步骤二,启动微服务,微服务启动时自动完成nacos服务注册,同时上报当前微服务的netty服务端的端口和微服务的基础信息至nacos服务端,在nacos服务端形成服务实例,微服务监听到服务启动完成后,调用初始化netty服务端服务代码,启动netty服务端并且初始化netty服务端服务;
7.步骤三,在初始化netty服务端服务的同时启动线程监控任务,用于维护微服务之间的tcp链路;
8.步骤四,在完成步骤二和步骤三后,进行消息体的推送,消息体发送时,当任意一个微服务,向其他微服务发送消息时,该任意一个微服务的服务器获取微服务集群,然后遍历所述微服务集群,获取到每个微服务的服务器的会话控制,通过netty服务端的写操作接口,发送消息至其他的微服务;
9.步骤五,当其他微服务netty服务端收到消息之后,通过消息体中的消息类型进入到指定java代码处理,并接收指定java代码处理后收到的消息,实现消息体的推送。
10.优选的,所述消息体包括消息类型、消息数据、目标服务器、消息id、消息动作以及是否全局推送标识。
11.优选的,所述步骤二,还包括:
12.微服务注册到nacos服务端之后,微服务会每隔一定的时间向nacos服务端发送心跳包,所述心跳包包含了当前服务实例的名称、ip、微服务端口、集群名、权重信息。
13.优选的,所述任意一个微服务为第一微服务,所述其他微服务包括第二微服务、第三微服务
…
第n微服务,n为大于1的正整数。
14.优选的,在步骤四中,在初始化netty服务端服务的同时启动线程监控任务,用于维护微服务之间的tcp链路,还包括:
15.首先扫描任务通过nacos服务端接口获取nacos实例map集合;
16.每台微服务内部会从内存中获取到之前已经建立过的长链接集合map,以此来对比判断有哪些微服务退出,以及哪些需要接入netty服务端,并与这些微服务的netty服务端建立tcp长连接,剔除已不存在的微服务;
17.最后新的微服务集群保存在内存中,并且与对应的服务器的会话控制关联保存,形成新的长链接集合map,方便下次扫描任务时比对判断。
18.优选的,在收到心跳包后,还包括根据微服务ip与微服务端口判断nacos服务端是否存在该当前服务实例,
19.如果存在,则记录本次心跳包的发送时间,并设置该当前服务实例状态为
‘
健康’,然后推送微服务状态变更消息,之后再返回心跳间隔;
20.如果不存在,则微服务进行新的nacos服务注册,直至将新的服务实例存储在nacos实例map集合中,此后则记录本次心跳包的发送时间,并设置该当前服务实例状态为
‘
健康’,然后推送最新微服务实例列表,之后再返回心跳间隔。
21.优选的,在步骤二中,所述的微服务启动时自动完成nacos服务注册是指的微服务通过发送rest请求的方式向nacos服务端注册自己的服务,提供自身的netty服务端的端口和基础信息,nacos服务端接收到注册请求后,会把微服务提供的netty服务端的端口和微服务的基础信息存储在一个nacos实例map集合中。
22.优选的,每台微服务内部会从内存中获取到之前已经建立过长链接的集合,以此来对比判断有哪些微服务退出,以及哪些需要接入netty服务端,并与这些微服务的netty服务端建立tcp长连接,剔除已不存在的微服务,具体包括以下步骤:
23.首先历遍微服务的长链接集合map和nacos实例map集合,通过ip和端口,判断长链接集合map和nacos实例map集合是否存在已不存在的微服务,并找到需要建立tcp长连接的新的微服务;
24.如果是微服务的长链接集合map中存在一个微服务,而nacos实例map集合中不存在对应的微服务netty服务端的端口,则判断该微服务为不存在的微服务,剔除微服务的长链接集合map中的该微服务;
25.如果微服务的长链接集合map中存在一个微服务,而nacos实例map集合中存在对应的微服务netty服务端的端口,则判断该微服务已经与nacos实例map集合中的该微服务的netty服务端建立了tcp长连接,此时跳过判断,保持不变,不作任何的处理;
26.如果nacos实例map集合中存在微服务netty服务端的端口,而微服务的长链接集合map中不存在对应的微服务,则判断需要接入微服务netty服务端,建立新的微服务,且该新的微服务自动加入到微服务的长链接集合map中,并与nacos实例map集合中的微服务的netty服务端建立长连接。
27.优选的,所述的每隔一定的时间的时间间隔为1~3秒。
28.优选的,在步骤一中,创建针对待推送的消息体的通知分发服务任务后,接收分发服务任务后,并进行消息体发送前的预备工作,息体发送前的预备工作包括步骤二和步骤三,并且在后面的的任意微服务之间发送消息体时,无需再重新进行步骤二和步骤三的过
程。
29.与现有技术相比,本发明提供了一种基于netty和nacos的分布式通知方法,具备以下有益效果:
30.本发明通过充分的利用nacos的4个特性,即服务发现与服务健康检查、动态配置管理、动态dns服务、服务和元数据管理,并与netty高性能、异步事件驱动的nio框架,提供了对tcp传输的支持,使得微服务之间通知,高效可靠的使用,本发明通过netty+nacos,确保了微服务之间的通知更高效和更稳定。
31.该方法中未涉及部分均与现有技术相同或可采用现有技术加以实现,本发明结构科学合理,使用安全方便,为人们提供了很大的帮助。
附图说明
32.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制,在附图中:
33.图1为本发明提出的一种基于netty和nacos的分布式通知方法中上传netty信息和微服务信息的流程图;
34.图2为本发明提出的一种基于netty和nacos的分布式通知方法中收到心跳包后的处理流程图;
35.图3为本发明提出的一种基于netty和nacos的分布式通知方法中获取注册微服务netty和微服务信息的流程图。
具体实施方式
36.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.请参阅图1-3,本发明提供一种技术方案:一种基于netty和nacos的分布式通知方法,包括:
38.步骤一,需要定义待推送的消息体,创建针对待推送的消息体的通知分发服务任务;其中消息体包括消息类型、消息数据、目标服务器、消息id、消息动作以及是否全局推送标识。
39.步骤二,启动微服务,微服务启动时自动完成nacos服务注册的同时,上报当前微服务的netty服务端的端口和微服务的基础信息至nacos服务端,在nacos服务端形成服务实例,微服务监听到服务启动完成后,调用初始化netty服务端服务代码,启动netty服务端并且初始化netty服务端服务;
40.步骤三,在初始化netty服务端服务的同时启动线程监控任务,用于维护微服务之间的tcp链路;
41.步骤四,在完成步骤二和步骤三后,进行消息体的推送,消息体发送时,消息发送时,当任意一个微服务,向其他微服务发送消息时,该任意一个微服务的服务器获取微服务集群,然后遍历所述微服务集群,获取到每个微服务的服务器的会话控制,通过netty服务
端的写操作接口,发送消息至其他微服务;
42.步骤五,当其他微服务netty服务端收到消息之后,通过消息体中的消息类型进入到指定java代码处理,并接收指定java代码处理后收到的消息,实现消息体的推送。当服务端收到微服务发送来的消息,然后进入指定java代码处理,这样我们就可以用极少的报文,完成了消息通知,减少网络开销,就是实现了本发明的最后通知。
43.本发明的技术方案,在消息通知过程中不存在使用第三方中间件进行信息存储和传达的过程,提高了通知传送的效率,也降低了网络压力。如果我们使用第三方中间件,就需要首先需要维护中间件的运行状态,其次在消息通知中,需要把完整的消息全部发送出去。当使用网络地址获取消息时,会存在信息传送不实时的问题,另外由于需要主动去调用所有的微服务接口,比较耗时,也增加了微服务的请求压力。
44.其中,在步骤四中,微服务集群是指的一个特定的大型复杂软件包含的所有微服务的集合体,每个微服务对应特定的功能,本发明的微服务集群是通过nacos服务端接口获取的集合。
45.在步骤四中,会话控制一般称为会话session,session对象存储特定用户会话所需的属性及配置信息,这样,当用户在应用程序的web页之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去,当用户请求来自应用程序的web页时,如果该用户还没有会话,则web服务器将自动创建一个session对象。当会话过期或被放弃后,服务器将终止该会话。
46.在步骤四中,可以理解为,任意一个微服务为第一微服务,或者微服务a,其他微服务包括第二微服务(或者微服务b)、第三微服务(或者微服务c)
…
第n微服务(或者微服务n),n为大于1的正整数。例如,参见附图3,当微服务a,向微服务bcd发送消息时,微服务a的服务器获取微服务集群,然后遍历微服务集群,获取到每个微服务的服务器的会话控制,通过netty服务端的写操作接口,发送消息至微服务bcd。
47.其中,在步骤一中,创建针对待推送的消息体的通知分发服务任务后,接收分发服务任务后,并进行消息体发送前的预备工作,息体发送前的预备工作包括步骤二和步骤三,并且在后面的的任意微服务之间互相发送消息体时,无需再重新进行步骤二和步骤三的过程,相当于在各个微服务的信息的传递过程中,微服务启动后的过程以及启动线程监控任务均处于一直保持的状态,无需每次消息体发送前都重新的启动,监控任务也是实施存在,提供一个安全的信息传递环境,这种状况下,消息体可以在微服务之间任意的发送和传递,只需要进行步骤四和步骤五的传递过程即可。这种方案也可以提高消息传递的效率以及安全性,降低网络压力。
48.所述步骤二,还包括:微服务注册到nacos服务端之后,微服务会每隔一定的时间向nacos服务端发送心跳包,心跳包就是在微服务和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,心跳包包含了当前服务实例的名称、ip、微服务的端口、集群名、权重等信息。其中,每隔一定的时间为1~3秒,通过该时间间隔内发送心跳包,可以确保整体把控,实时更新及时反馈,也不至于发送过于频繁导致网络压力大。
49.其中,在步骤二中,微服务启动时自动完成nacos服务注册是指的微服务会通过发送rest请求的方式向nacos服务端注册自己的服务,提供自身的netty服务端的端口和基础
信息,比如ip地址、微服务端口等信息,本发明中通过发送心跳包来实现对自身数据的提供。一般来说,nacos服务端接收到注册请求后,就会把微服务提供的netty服务端的端口和微服务的基础信息存储在一个nacos实例map集合中。
50.微服务在启动时,会将微服务的ip、微服务端口等信息封装成一个instance实例对象,准备向nacos服务端注册,在注册前,微服务会根据instance这个包含ip、端口等信息的实例对象封装成一个beaninfo对象,并创建一个定时的心跳连接机制,每隔一段时间都会向nacos服务端发送put请求,nacos服务端在接收到心跳请求后,会检查当前服务列表是否有这个服务实例,如果有,则刷新该服务实例的心跳时间,如果没有的话,则微服务进行新的nacos服务注册。
51.参见图2,在收到心跳包后,还包括根据ip与微服务端口判断nacos服务端是否存在该当前服务实例,
52.如果存在,则记录本次心跳包的发送时间,并设置该当前服务实例状态为
‘
健康’,然后推送最新微服务实例列表,之后再返回心跳间隔;
53.如果不存在,则通过nacos服务端注册新的服务实例,直至将新的服务实例存储在nacos实例map集合中,此后则记录本次心跳包的发送时间,并设置该当前服务实例状态为
‘
健康’,然后推送推送最新微服务实例列表,之后再返回心跳间隔。此处的nacos实例map集合指的是一个程序里面保存的已经存在的服务实例集合。
54.其中,服务实例是在web服务中处理特定的服务请求的单元,一般情况下,一个web服务会有多个服务实例同时参与不同的工作流,同时,一个工作流包含很多不同web服务的服务实例,因此服务实例对应特定的功能和性能,以及特定的任务。
55.在步骤四中,在初始化netty服务端服务的同时启动线程监控任务,用于维护微服务之间的tcp链路,传输控制协议(tcp,transmission control protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由ietf的rfc 793定义,tcp旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠tcp提供可靠的通信服务。
56.上述线程监控任务还包括:
57.首先扫描任务通过nacos服务端接口获取nacos实例map集合;
58.每台微服务内部会从内存中获取到之前已经建立过的长链接集合map,以此来对比判断有哪些微服务退出,以及哪些需要接入微服务的netty服务端,并与这些微服务的netty服务端建立tcp长连接,剔除已不存在的微服务;
59.最后新的微服务集群保存在内存中,并且与对应的服务器的会话控制关联保存,形成新的长链接集合map,方便下次扫描任务时比对判断,下次扫描任务时的比对判断指的重新进行线程监控任务,以判断是否有微服务退出,或者是否需要接入微服务的netty服务端。
60.其中每台微服务内部会从内存中获取到之前已经建立过的长链接集合map,以此来对比判断有哪些微服务退出,以及哪些需要接入netty服务端,并与这些微服务的netty服务端建立tcp长连接,剔除已不存在的微服务,具体包括以下步骤:
61.首先历遍微服务的长链接集合map和nacos实例map集合,通过ip和netty端口,判断长链接集合map和nacos实例map集合是否存在已不存在的微服务,并找到需要建立tcp长
连接的新的微服务;
62.如果是微服务的长链接集合map中存在一微服务ai,i的取值可以为1,2,3....,例如a3,而nacos实例map集合中不存在对应的微服务netty服务端bi的端口,i的取值可以为1,2,3....,例如b3,则判断微服务ai为不存在的微服务,剔除微服务的长链接集合map中的该微服务ai。
63.如果微服务的长链接集合map中存在一微服务ai,i的取值可以为1,2,3....,例如a3,而nacos实例map集合中存在对应的微服务netty服务端bi的端口,i的取值可以为1,2,3....,例如b3,则微服务已经与nacos实例map集合中的该微服务的netty服务端建立了tcp长连接,此时跳过判断,保持不变,不作任何的处理;
64.如果nacos实例map集合中存在微服务netty服务端的端口bi,i的取值可以为1,2,3....,例如b3,而微服务的长链接集合map中不存在对应的微服务ai,i的取值可以为1,2,3....,例如a3,则需要接入微服务netty服务端,建立新的微服务,且该新的微服务自动加入到微服务的长链接集合map中,并与nacos实例map集合中的微服务的netty服务端建立长连接。
65.上述判断方法,采用通过ip和netty端口的方式来判断,首先基于微服务的长链接集合map和nacos实例map集合使用相同的ip地址,其次,由于微服务在启动时,自动完成nacos服务注册,上报当前微服务netty服务端的端口至nacos服务端的元数据信息中,使得nacos实例map集合能够获取注册的微服务netty及微服务信息,其中包含了微服务netty服务端的端口信息,因此在遍历微服务的长链接集合map时,能够进行上述的判断过程。
66.本发明中,nacos实例map集合相当于nacos服务端的一个数据存储中心,能够进行数据的存储。
67.通过上述线程监控任务,能够对微服务中不存在的微服务随时进行剔除,节省了存储空间,也能够通过接入新的微服务的netty服务端的方式进行微服务更新,以确保微服务集群能够随时处于健康的状态,进而提高了工作效率。
68.本发明通过充分的利用nacos的4个特性,即服务发现与服务健康检查、动态配置管理、动态dns服务、服务和元数据管理,并与netty高性能、异步事件驱动的nio框架,提供了对tcp传输的支持,使得微服务之间通知,高效可靠的使用,并且无需再依赖第三方中间件进行消息的传送,有效降低了网络压力,提高了网络进行消息传送的效率。
69.尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
技术特征:
1.一种基于netty和nacos的分布式通知方法,包括以下步骤:步骤一,定义待推送的消息体,创建针对待推送的消息体的通知分发服务任务;步骤二,启动微服务,微服务启动时自动完成nacos服务注册,同时上报当前微服务的netty服务端的端口和微服务的基础信息至nacos服务端,在nacos服务端形成服务实例,微服务监听到服务启动完成后,调用初始化netty服务端服务代码,启动netty服务端并且初始化netty服务端服务;步骤三,在初始化netty服务端服务的同时启动线程监控任务,用于维护微服务之间的tcp链路;步骤四,在完成步骤二和步骤三后,进行消息体的推送,消息体发送时,当任意一个微服务,向其他微服务发送消息时,该任意一个微服务的服务器获取微服务集群,然后遍历所述微服务集群,获取到每个微服务的服务器的会话控制,通过netty服务端的写操作接口,发送消息至其他的微服务;步骤五,当其他微服务netty服务端收到消息之后,通过消息体中的消息类型进入到指定java代码处理,并接收指定java代码处理后收到的消息,实现消息体的推送。2.根据权利要求1所述的一种基于netty和nacos的分布式通知方法,其特征在于:所述消息体包括消息类型、消息数据、目标服务器、消息id、消息动作以及是否全局推送标识。3.根据权利要求1所述的一种基于netty和nacos的分布式通知方法,其特征在于:所述步骤二,还包括:微服务注册到nacos服务端之后,微服务会每隔一定的时间向nacos服务端发送心跳包,所述心跳包包含了当前服务实例的名称、ip、微服务端口、集群名、权重信息。4.根据权利要求1所述的一种基于netty和nacos的分布式通知方法,其特征在于:所述任意一个微服务为第一微服务,所述其他微服务包括第二微服务、第三微服务
…
第n微服务,n为大于1的正整数。5.根据权利要求1所述的一种基于netty和nacos的分布式通知方法,其特征在于:在步骤四中,在初始化netty服务端服务的同时启动线程监控任务,用于维护微服务之间的tcp链路,还包括:首先扫描任务通过nacos服务端接口获取nacos实例map集合;每台微服务内部会从内存中获取到之前已经建立过的长链接集合map,以此来对比判断有哪些微服务退出,以及哪些需要接入netty服务端,并与这些微服务的netty服务端建立tcp长连接,剔除已不存在的微服务;最后新的微服务集群保存在内存中,并且与对应的服务器的会话控制关联保存,形成新的长链接集合map,方便下次扫描任务时比对判断。6.根据权利要求3所述的一种基于netty和nacos的分布式通知方法,其特征在于:nacos服务端在收到心跳包后,还包括根据微服务ip与微服务端口判断nacos服务端是否存在该当前服务实例,如果存在,则记录本次心跳包的发送时间,并设置该当前服务实例状态为
‘
健康’,然后推送微服务状态变更消息,之后再返回心跳间隔;如果不存在,则微服务进行新的nacos服务注册,直至将新的服务实例存储在nacos实例map集合中,此后则记录本次心跳包的发送时间,并设置该当前服务实例状态为
‘
健康’,
然后推送最新微服务实例列表,之后再返回心跳间隔。7.根据权利要求3所述的一种基于netty和nacos的分布式通知方法,其特征在于:在步骤二中,所述的微服务启动时自动完成nacos服务注册是指的微服务通过发送rest请求的方式向nacos服务端注册自己的服务,提供自身的netty服务端的端口和基础信息,nacos服务端接收到注册请求后,会把微服务提供的netty服务端的端口和微服务的基础信息存储在一个nacos实例map集合中。8.根据权利要求5所述的一种基于netty和nacos的分布式通知方法,其特征在于:每台微服务内部会从内存中获取到之前已经建立过长链接的集合,以此来对比判断有哪些微服务退出,以及哪些需要接入netty服务端,并与这些微服务的netty服务端建立tcp长连接,剔除已不存在的微服务,具体包括以下步骤:首先历遍微服务的长链接集合map和nacos实例map集合,通过ip和netty端口,判断长链接集合map和nacos实例map集合是否存在已不存在的微服务,并找到需要建立tcp长连接的新的微服务;如果是微服务的长链接集合map中存在一个微服务,而nacos实例map集合中不存在对应的微服务netty服务端的端口,则判断该微服务为不存在的微服务,剔除微服务的长链接集合map中的该微服务;如果微服务的长链接集合map中存在一个微服务,而nacos实例map集合中存在对应的微服务netty服务端的端口,则判断该微服务已经与nacos实例map集合中的该微服务的netty服务端建立了tcp长连接,此时跳过判断,保持不变,不作任何的处理;如果nacos实例map集合中存在微服务netty服务端的端口,而微服务的长链接集合map中不存在对应的微服务,则判断需要接入微服务netty服务端,建立新的微服务,且该新的微服务自动加入到微服务的长链接集合map中,并与nacos实例map集合中的微服务的netty服务端建立长连接。9.根据权利要求3所述的一种基于netty和nacos的分布式通知方法,其特征在于:所述的每隔一定的时间的时间间隔为1~3秒。10.根据权利要求1所述的一种基于netty和nacos的分布式通知方法,其特征在于:在步骤一中,创建针对待推送的消息体的通知分发服务任务后,接收分发服务任务后,并进行消息体发送前的预备工作,息体发送前的预备工作包括步骤二和步骤三,并且在后面的的任意微服务之间发送消息体时,无需再重新进行步骤二和步骤三的过程。
技术总结
本发明公开了一种基于Netty和Nacos的分布式通知方法,包括以下步骤:定义待推送的消息体;启动微服务,微服务启动时自动完成Nacos服务注册,上报微服务的Netty服务端的端口和微服务的基础信息至Nacos服务端;启动线程监控任务,用于维护服务之间的TCP链路;消息发送时,当任意一个微服务,向其他微服务发送消息时,该任意一个微服务的服务器获取微服务集群;其他微服务收到消息之后,通过消息体中的消息类型的类型进入到指定java代码处理收到的消息。本发明,通过充分的利用Nacos的特性,并与Netty高性能、异步事件驱动的NIO框架,提供了对TCP传输的支持,使得微服务之间通知高效可靠。效可靠。效可靠。
技术研发人员:王晗 朱贺军 夏昆 崔培升
受保护的技术使用者:北京亿赛通科技发展有限责任公司
技术研发日:2023.03.30
技术公布日:2023/9/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种开关柜防凝露装置的制作方法 下一篇:基于增量学习的模型推理方法及电子设备与流程