CN116048826A - 微服务消息调度的方法、装置、电子设备及存储介质 - Google Patents

微服务消息调度的方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN116048826A
CN116048826A CN202111265281.XA CN202111265281A CN116048826A CN 116048826 A CN116048826 A CN 116048826A CN 202111265281 A CN202111265281 A CN 202111265281A CN 116048826 A CN116048826 A CN 116048826A
Authority
CN
China
Prior art keywords
service
message
micro
rabbitmq
queue
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.)
Pending
Application number
CN202111265281.XA
Other languages
English (en)
Inventor
舒洋洋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Iol Wuhan Information Technology Co ltd
Original Assignee
Iol Wuhan Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Iol Wuhan Information Technology Co ltd filed Critical Iol Wuhan Information Technology Co ltd
Priority to CN202111265281.XA priority Critical patent/CN116048826A/zh
Publication of CN116048826A publication Critical patent/CN116048826A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明提供一种微服务消息调度的方法、装置、电子设备及存储介质。所述方法包括:基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案。本发明提供的微服务消息调度的方法,通过RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,zookeeper的引入可以对多个分布式服务进行集中注册管理,可以更大的利用系统资源。

Description

微服务消息调度的方法、装置、电子设备及存储介质
技术领域
本发明涉及互联网应用领域,具体涉及一种微服务消息调度的方法、装置、电子设备及存储介质。
背景技术
由于系统分布式微服务化拆分,单体业务内执行多个逻辑操作采用独立服务逻辑拆分,远程微服务调用的方式,且不同的服务可能存在不同的通信协议方式,需要对各个微服务的调度进行管理,且在服务器负载较高的情况下就有可能出现单体业务内执行的多个逻辑操作里只有部分逻辑执行成功,此时就涉及到分布式事务一致性的问题,要保证此种情况下的数据的一致性和微服务调度的效率。
随着微服务化架构的逐步演进,系统的单体架构逐渐演变为分布式,以及微服务架构,很多现有的任务调度平台已经不能满足业务系统的需求。在分布式架构设计下,需要对各个服务进行自动管理和调度优化,而随着访问量的不断增长,时常可能出现服务器处理器和内存占用过高,导致服务之间的通信和数据处理缓慢,这种情况极大可能是因为出现了单体业务程序里部分逻辑处理超时或链接超时等情况。导致数据的不完整性,且问题的主动发现和排查都较为困难,整个系统的健壮性和抗并发能力也较弱。
发明内容
针对现有技术存在的问题,本发明提供一种微服务消息调度的方法、装置、电子设备及存储介质。
第一方面,本发明提供一种微服务消息调度的方法,包括:
基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
可选的,所述方法还包括:
若存在并发的多个单体业务,则基于Hyperf框架,启用多线程并行处理所述RabbitMQ消息队列的所有消息体;
其中,所述RabbitMQ消息队列的所有消息体由所有逻辑操作的请求信息各自封装而成,所述所有逻辑操作包括所述并发的多个单体业务对应的所有主逻辑操作和所有辅逻辑操作。
可选的,所述基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列之后,所述方法还包括:
确定所述单体业务的主逻辑操作对应消息体的配置信息,和所述单体业务的多个辅逻辑操作对应消息体的配置信息;
其中,所述配置信息为所述消息体与程序接口之间的对应关系。
可选的,所述方法还包括:
当所述单体业务被触发时,基于所述RabbitMQ消息队列中各消息体,以及所述单体业务的主逻辑操作和多个辅逻辑操作对应的程序接口的配置信息,调用对应的程序执行所述消息体;
在数据库中保存所述单体业务的各所述消息体的参数;
基于所述RabbitMQ消息队列中各消息体的执行结果,记录对应的消息状态在数据库中,并更新所述RabbitMQ消息队列。
可选的,所述基于所述RabbitMQ消息队列中各消息体的执行结果,记录对应的消息状态在数据库中,并更新所述RabbitMQ消息队列,包括:
若所述执行结果为失败,则将所述消息体从RabbitMQ消息队列中移除,并加入RabbitMQ延时队列;
基于预先设定的时间间隔和最大重复次数,重复执行RabbitMQ延时队列中的消息体,并记录对应的消息状态在数据库中;
若达到所述最大重复次数时,所述消息体的执行结果为失败,则将所述消息体从RabbitMQ延时队列移除,加入RabbitMQ死信队列,并触发报警机制。
可选的,所述预先设定的时间间隔是根据需求按照递增的形式设定。
可选的,所述最优规则具体为以下任一或几种的组合:
服务健康度、监控服务请求量和内存占用情况。
第二方面,本发明提供一种微服务消息调度的装置,包括:
队列确定模块,用于基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
微服务集群确定模块,用于基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
微服务确定模块,用于基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
第三方面,本发明提供一种电子设备,包括处理器和存储有计算机程序的存储器,所述处理器执行所述程序时实现第一方面所述微服务消息调度的方法的步骤。
第四方面,本发明提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行第一方面所述微服务消息调度的方法的步骤。
本发明提供的微服务消息调度的方法、装置、电子设备及存储介质,通过RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,而zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的微服务消息调度的方法的流程示意图;
图2是本发明提供的微服务消息调度的方法的整体流程示意图;
图3是本发明提供的微服务消息调度的装置的结构示意图;
图4是本发明提供的电子设备的实体结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图4描述本发明的微服务消息调度的方法、装置、电子设备及存储介质。
图1是本发明提供的微服务消息调度的方法的流程示意图。如图1所示,该方法包括:
步骤101、基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
步骤102、基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
步骤103、基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
具体的,zookeeper是一种分布式服务架构,主要用来解决分布式应用中经常遇到的一些数据管理问题,维护类似树形的文件系统数据结构,可以在zookeeper文件系统中创建文件节点,并监听该节点的内容变化。
RabbitMQ是一种分布式消息队列,通过一台RabbitMQ服务器,消息发送者不需要了解消息接受者的地址,而只需要知道RabbitMQ的服务器地址即可以发送消息,通过RabbitMQ的消息路由机制,消息接受者可以准确地接收到消息发送者的消息。
消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只需把消息发布到RabbitMQ中而不需确定或知道下一步谁来取,消息使用者从RabbitMQ中取消息而不需知道是谁发布的。这样发布者和使用者均不需知道对方的存在。
RabbitMQ用于在分布式系统中存储转发消息,在易用性、扩展性和高可用性等方面表现不俗。具体特点包括:
1、可靠性(Reliability)
RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认和发布确认。
2、灵活的路由(Flexible Routing)
在消息进入队列之前,通过Exchange(交换器)来路由消息的。对于典型的路由功能,RabbitMQ已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起,也通过插件机制实现自己的Exchange。
3、消息集群(Clustering)
多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker(代理或中介)。
4、高可用(Highly Available Queues)
队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
5、多种协议(Multi-protocol)
RabbitMQ支持多种消息队列协议,比如STOMP(Simple(or Streaming)TextOrientated Messaging Protocol,(流)文本定向消息协议)、MQTT(Message QueuingTelemetry Transport,消息队列遥测传输)等等。
6、多语言客户端(Many Clients)
RabbitMQ几乎支持所有常用语言,比如Java、.NET和Ruby等等。
7、管理界面(Management UI)
RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息Broker的许多方面。
8、跟踪机制(Tracing)
如果消息异常,RabbitMQ提供了消息跟踪机制,使用者可以找出发生了什么。
9、插件机制(Plugin System)
RabbitMQ提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。
本发明通过RabbitMQ将单体业务的逻辑解耦合,也就是将单体业务逻辑进行拆解,得到单体业务的主逻辑操作和多个辅逻辑操作,已用户注册为例,同时还包括赠送优惠券和积分的操作,则将整个用户注册的单体业务拆解之后,得到主逻辑操作是用户注册,获取用户相关的个人信息,辅逻辑操作是用户注册时,对该用户赠送优惠券和赠送积分两个操作。也可将主逻辑操作称为消息生产者,多个辅逻辑操作称为生产者的消费者。
将上述用户注册请求信息按照不同逻辑操作分别进行封装,得到对应的消息体,存入数据库后,并投递至RabbitMQ消息队列。RabbitMQ消息队列并行执行上述主逻辑操作和辅逻辑操作对应的消息体,可能需要调用不同的微服务集群。
所述微服务集群主要起分散能力的作用,将提供相同的服务的多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
本发明中通过zookeeper保存微服务集群中各微服务提供者路由地址,并通过服务通信心跳包检测,确定连接的微服务提供者的连接是否正常,若连接不正常,即某个微服务提供者可能存在掉线的情况,则提供预警功能,发送相关的提示信息,以供使用者参考或者查看,根据预警信息,查找问题点,尽快修复有问题的地方。
此外,zookeeper中心保存有提供相同微服务的微服务集群,所述微服务集群包括的多个可提供相同微服务的提供者路由地址,根据最优规则,筛选出最优的微服务提供者的地址,为当前的消息体提供对应的微服务。并且当该微服务提供者存在服务异常,则自动标记告警,并将该微服务提供者的地址从zookeeper中心删除。
单体业务的请求消息可通过上述的流程生成对应的主逻辑操作,以及多个辅逻辑操作,并根据请求消息将不同逻辑操作的相关信息封装成消息体加入RabbitMQ消息队列,每个消息体需要调用的微服务,则基于最优规则在zookeeper中心进行筛选,选择最优的微服务提供者给该消息体提供微服务。
本发明提供的微服务消息调度的方法,通过RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
可选的,所述方法还包括:
若存在并发的多个单体业务,则基于Hyperf框架,启用多线程并行处理所述RabbitMQ消息队列的所有消息体;
其中,所述RabbitMQ消息队列的所有消息体由所有逻辑操作的请求信息各自封装而成,所述所有逻辑操作包括所述并发的多个单体业务对应的所有主逻辑操作和所有辅逻辑操作。
具体的,Hyperf是一个高性能,高灵活性的渐进式PHP协程框架,内置协程服务器及大量常用的组件,性能较传统基于PHP-FPM的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于PSR(PHP Standards Recommendations,PHP标准建议)标准实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是可替换与可复用的。
对于超高速,基于Swoole协程并在框架设计上进行大量的优化以确保超高性能的输出。
对于灵活性,基于Hyperf强大的依赖注入组件,组件均基于PSR标准的契约和由Hyperf定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。
基于以上的特点,Hyperf将存在丰富的可能性,如实现Web服务,网关服务,分布式中间件,微服务架构,游戏服务器和物联网(IOT,Internet of Things)等。
本发明中针对多并发单体业务请求,单线程处理这种多并发单体业务请求时,仍可能存在访问量激增,服务器处理不及时,内存占用过高,导致服务之间的通信和数据处理缓慢的情形,因此,引入Hyperf框架可同时启用多个进程并行处理所有并发单体业务的请求信息。
比如同时有1000个用户发起用户注册请求,每个用户请求中包括用户注册的主逻辑操作,还包括赠送积分和赠送优惠券的辅逻辑操作,Hyperf框架将所有的用户注册请求分成10个进程进行处理,各个进行处理100的用户注册请求,从而达到均衡各进程的负载压力。
此外,基于Hyperf框架可以将资源分配的粒度更细化,包括:多进程,多线程和多协程。一个进程可以包含多个线程,一个线程可以包含多个协程。同一进程中的多个线程可以并发执行。如果某一个或者几个线程因等待I/O操作而遭阻塞,那么其他线程依然可以继续运行。一个线程可以包含多个协程,不同进程间数据共享较难,同一进程下不同线程间数据共享比较容易。
本发明提供的微服务消息调度的方法,通过Hyperf协程框架的多进程,多线程多协程的处理等特性,并发处理能力,并结合RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
可选的,所述基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列之后,所述方法还包括:
确定所述单体业务的主逻辑操作对应消息体的配置信息,和所述单体业务的多个辅逻辑操作对应消息体的配置信息;
其中,所述配置信息为所述消息体与程序接口之间的对应关系。
具体的,通过设置配置中心,将多个逻辑操作的单体业务的做逻辑操作作为生产者注册到配置中心,将单体业务对应的辅逻辑操作作为消费者注册到配置中心。例如,用户注册包括用户账号添加并赠送优惠券和积分。用户账号添加对应配置中心自定义的一个程序调用接口A,赠送优惠券对应配置中心自定义的另外一个程序调用接口B,赠送积分对应配置中心自定义的另外一个程序调用接口C,并且程序调用接口A,程序调用接口B和程序调用接口C之间的关系,和用户注册中用户账号条件,赠送优惠券和积分的对应关系相同。
当单体业务触发时,可根据单体业务的多个逻辑操作关系调用配置中心预先配置好的程序调用接口A,程序调用接口B和程序调用接口C。
本发明提供的微服务消息调度的方法,通过Hyperf协程框架的多进程,多线程多协程的处理等特性,并发处理能力,并结合RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,同时对业务逻辑的拆解RabbitMQ消息的持久化存储和自动重发机制等都大大的增强了系统的稳定性和数据的一致性。而zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
可选的,所述方法还包括:
当所述单体业务被触发时,基于所述RabbitMQ消息队列中各消息体,以及所述单体业务的主逻辑操作和多个辅逻辑操作对应的程序接口的配置信息,调用对应的程序执行所述消息体;
在数据库中保存所述单体业务的各所述消息体的参数;
基于所述RabbitMQ消息队列中各消息体的执行结果,记录对应的消息状态在数据库中,并更新所述RabbitMQ消息队列。
具体的,当单体业务被触发时,自动检索调用配置中心预先配置好的单体业务请求对应的消息生产者的程序调用接口,并获取与其关联的消费者的程序调用接口,即先在配置中心获取单体业务请求对应的主逻辑操作的程序调用接口,基于所述单体业务请求中主逻辑操作和多个辅逻辑操作之间的关联关系,获取对应的辅逻辑操作的程序调用接口,并将请求信息中对应各逻辑操作的部分参数和信息进行封装,作为消息记录分别存储到数据库中,并将主逻辑操作的消息记录和多个辅逻辑操作的消息记录进行关联。将上述单体业务各个逻辑操作请求信息和参数封装成单个消息体,投递到RabbitMQ消息队列中。并通过数据库记录每个消息体的执行结果,根据每个消息体的执行结果,更新所述RabbitMQ消息队列。比如将执行结果失败的消息体从上述RabbitMQ消息队列中删除,放入其他的处理队列中,更新当前RabbitMQ消息队列。
本发明提供的微服务消息调度的方法,通过Hyperf协程框架的多进程,多线程多协程的处理等特性,并发处理能力,并结合RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,同时对业务逻辑的拆解RabbitMQ消息的持久化存储和自动重发机制等都大大的增强了系统的稳定性和数据的一致性。而zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
可选的,所述基于所述RabbitMQ消息队列中各消息体的执行结果,记录对应的消息状态在数据库中,并更新所述RabbitMQ消息队列,包括:
若所述执行结果为失败,则将所述消息体从RabbitMQ消息队列中移除,并加入RabbitMQ延时队列;
基于预先设定的时间间隔和最大重复次数,重复执行RabbitMQ延时队列中的消息体,并记录对应的消息状态在数据库中;
若达到所述最大重复次数时,所述消息体的执行结果为失败,则将所述消息体从RabbitMQ延时队列移除,加入RabbitMQ死信队列,并触发报警机制。
具体的,若所述单体业务对应的某个消息体执行结果为失败,则将所述消息体从RabbitMQ消息队列中移除,并加入RabbitMQ延时队列;
并通过预先设定的时间间隔(失败消息重试时间间隔)和最大重复次数,重复执行所述RabbitMQ延时队列中的消息体,并记录所述消息体的状态在数据库中;若重试次数达到最大重复次数,且所述消息体执行结果仍为失败,则将上述消息体从RabbitMQ延时队列移除,加入RabbitMQ死信队列,并触发报警机制。从而实现了RabbitMQ延时队列的自动重发。
通过数据库中的消息记录,可视化的展示所有单体业务的相关逻辑操作的执行状态,结合RabbitMQ死信队列自定义失败消息的自动重发间隔机制,触发报警机制,提醒人工干预解决相关问题。保障了系统稳定性和数据一致性。通过zookeeper完成了对分布式服务的集中管理和调度,在结合Hyperf协程框架的高性能并行处理能力,大大提高了整个系统的处理响应速度和系统瓶颈。
本发明提供的微服务消息调度的方法,通过Hyperf协程框架的多进程,多线程多协程的处理等特性,并发处理能力,并结合RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,同时对业务逻辑的拆解RabbitMQ消息的持久化存储和自动重发机制等都大大的增强了系统的稳定性和数据的一致性。而zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
可选的,所述预先设定的时间间隔是根据需求按照递增的形式设定。
具体的,为了降低微服务处理的压力,并以新的单体业务优先处理的原则,本发明中将预先设定的时间间隔是根据需求按照递增的形式设定,即第一次失败的预设时间为A,则第二次失败的阈值时间间隔为A+T,第三次失败的预设时间为A+2T等以此类推,这里的T是任意的单位时间,当然也可以不按照等比增加的形式。比如第一次失败的预设时间为A,则第二次失败的阈值时间间隔为B,第三次失败的预设时间为C等以此类推,A<B<C,且B-A<C-B。以上仅仅示例性说明,并不对本发明中的递增形式做具体的限定。
本发明提供的微服务消息调度的方法,通过Hyperf协程框架的多进程,多线程多协程的处理等特性,并发处理能力,并结合RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,同时对业务逻辑的拆解RabbitMQ消息的持久化存储和自动重发机制等都大大的增强了系统的稳定性和数据的一致性。而zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
可选的,所述最优规则具体为以下任一或几种的组合:
服务健康度、监控服务请求量和内存占用情况。
具体的,zookeeper中心可以根据微服务群中各微服务提供者的服务健康度、监控服务请求量和内存占用情况,自动推举最优服务提供者的地址。
其中,服务健康度是指服务是否存活可以正常访问,不同的服务进程在zookeeper下创建临时子节点,通过对处于zookeeper中心该子节点是否还存在来判断对应的服务进程是否存活。可理解的是单体业务对应的逻辑操作被触发时,会分配对应的服务进程处理该逻辑操作对应的消息体,该消息体的业务逻辑处理完毕,则该临时子节点不再存在。
监控服务请求量是指单体业务请求的个数。
本发明提供的微服务消息调度的方法,通过Hyperf协程框架的多进程,多线程多协程的处理等特性,并发处理能力,并结合RabbitMQ对业务逻辑解耦极大的加快程序运算速度和响应时间,同时对业务逻辑的拆解RabbitMQ消息的持久化存储和自动重发机制等都大大的增强了系统的稳定性和数据的一致性。而zookeeper的引入可以对多个分布式服务进行集中注册管理,利用单个服务集群的调用情况等多方面因素,保证服务器调用负载均衡,可以更大的利用系统资源。
图2是本发明提供的微服务消息调度的方法的整体流程示意图,如图2所示,多个单体业务触发对应的请求时,具体流程如下:
步骤1、根据多个单体业务请求,确定对应的生产者和消费者;
步骤2、对多个单体业务请求,启用多个进程并行处理上述单体业务请求对应的RabbitMQ消息队列;
步骤3、将上述单体业务请求中的各个逻辑操作封装成消息体,投递至RabbitMQ消息队列;
步骤4、根据RabbitMQ消息队列中各消息体需要调用的微服务,通过预配置的zookeeper地址,链接zookeeper;
步骤5、在zookeeper中心根据最优规则,确定最优的微服务提供者;也可根据服务调用情况,从zookeeper中心的服务地址集合中,推荐空闲服务提供者。
步骤6、hyperf框架只是多种通信协议和调用方式,转化为本地方法调用,返回结果集给步骤3中的RabbitMQ消息队列,并根据返回结果调整RabbitMQ消息队列。所有消费者的消息体执行完成后,通过hyperf框架返回调用结果。
下面对本发明提供的微服务消息调度的装置进行描述,下文描述的微服务消息调度的装置与上文描述的微服务消息调度的方法可相互对应参照。
图3是本发明提供的微服务消息调度的装置的结构示意图,如图3所示,所述装置包括:
队列确定模块301,用于基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
微服务集群确定模块302,用于基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
微服务确定模块303,用于基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
可选的,所述装置还包括框架模块304,用于若存在并发的多个单体业务,则基于Hyperf框架,启用多线程并行处理所述RabbitMQ消息队列的所有消息体;
其中,所述RabbitMQ消息队列的所有消息体由所有逻辑操作的请求信息各自封装而成,所述所有逻辑操作包括所述并发的多个单体业务对应的所有主逻辑操作和所有辅逻辑操作。
可选的,所述队列确定模块301还用于:
确定所述单体业务的主逻辑操作对应消息体的配置信息,和所述单体业务的多个辅逻辑操作对应消息体的配置信息;
其中,所述配置信息为所述消息体与程序接口之间的对应关系。
可选的,所述队列确定模块301还用于:
当所述单体业务被触发时,基于所述RabbitMQ消息队列中各消息体,以及所述单体业务的主逻辑操作和多个辅逻辑操作对应的程序接口的配置信息,调用对应的程序执行所述消息体;
在数据库中保存所述单体业务的各所述消息体的参数;
基于所述RabbitMQ消息队列中各消息体的执行结果,记录对应的消息状态在数据库中,并更新所述RabbitMQ消息队列。
可选的,所述队列确定模块301还用于:
若所述执行结果为失败,则将所述消息体从RabbitMQ消息队列中移除,并加入RabbitMQ延时队列;
基于预先设定的时间间隔和最大重复次数,重复执行所述RabbitMQ延时队列中的消息体,并记录对应的消息状态在数据库中;
若达到所述最大重复次数时,所述消息体的执行结果为失败,则将所述消息体从RabbitMQ延时队列移除,加入RabbitMQ死信队列,并触发报警机制。
可选的,所述预先设定的时间间隔是根据需求按照递增的形式设定。
可选的,所述最优规则具体为以下任一或几种的组合:
服务健康度、监控服务请求量和内存占用情况。
需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
在此需要说明的是,本发明实施例提供的上述装置,能够实现上述方法实施例所实现的所有方法步骤,且能够达到相同的技术效果,在此不再对本实施例中与方法实施例相同的部分及有益效果进行具体赘述。
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communication Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的计算机程序,以执行微服务消息调度的方法的步骤,例如包括:
基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的微服务消息调度的方法的步骤,例如包括:
基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
另一方面,本发明还提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行上述各方法所提供的微服务消息调度的方法的步骤,例如包括:
基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NANDFLASH)、固态硬盘(SSD))等。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种微服务消息调度的方法,其特征在于,包括:
基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
2.根据权利要求1所述的微服务消息调度的方法,其特征在于,所述方法还包括:
若存在并发的多个单体业务,则基于Hyperf框架,启用多线程并行处理所述RabbitMQ消息队列的所有消息体;
其中,所述RabbitMQ消息队列的所有消息体由所有逻辑操作的请求信息各自封装而成,所述所有逻辑操作包括所述并发的多个单体业务对应的所有主逻辑操作和所有辅逻辑操作。
3.根据权利要求1或2所述的微服务消息调度的方法,其特征在于,所述基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列之后,所述方法还包括:
确定所述单体业务的主逻辑操作对应消息体的配置信息,和所述单体业务的多个辅逻辑操作对应消息体的配置信息;
其中,所述配置信息为所述消息体与程序接口之间的对应关系。
4.根据权利要求1或2所述的微服务消息调度的方法,其特征在于,所述方法还包括:
当所述单体业务被触发时,基于所述RabbitMQ消息队列中各消息体,以及所述单体业务的主逻辑操作和多个辅逻辑操作对应的程序接口的配置信息,调用对应的程序执行所述消息体;
在数据库中保存所述单体业务的各所述消息体的参数;
基于所述RabbitMQ消息队列中各消息体的执行结果,记录对应的消息状态在数据库中,并更新所述RabbitMQ消息队列。
5.根据权利要求4所述的微服务消息调度的方法,其特征在于,所述基于所述RabbitMQ消息队列中各消息体的执行结果,记录对应的消息状态在数据库中,并更新所述RabbitMQ消息队列,包括:
若所述执行结果为失败,则将所述消息体从RabbitMQ消息队列中移除,并加入RabbitMQ延时队列;
基于预先设定的时间间隔和最大重复次数,重复执行所述RabbitMQ延时队列中的消息体,并记录对应的消息状态在数据库中;
若达到所述最大重复次数时,所述消息体的执行结果为失败,则将所述消息体从RabbitMQ延时队列移除,加入RabbitMQ死信队列,并触发报警机制。
6.根据权利要求5所述的微服务消息调度的方法,其特征在于,所述预先设定的时间间隔是根据需求按照递增的形式设定。
7.根据权利要求1或2所述的微服务消息调度的方法,其特征在于,所述最优规则具体为以下任一或几种的组合:
服务健康度、监控服务请求量和内存占用情况。
8.一种微服务消息调度的装置,其特征在于,包括:
队列确定模块,用于基于单体业务的各个逻辑操作对应的请求信息,确定以单个逻辑操作为单位的封装好的单个消息体,加入RabbitMQ消息队列;
微服务集群确定模块,用于基于RabbitMQ消息队列中不同逻辑操作对应的消息体,确定需要的微服务集群;
微服务确定模块,用于基于zookeeper中心的预配置信息,按照最优规则,确定所述微服务集群中最优的微服务提供者,作为所述单个逻辑操作的最优微服务调度方案;
其中,所述单体业务包括一个主逻辑操作和多个辅逻辑操作。
9.一种电子设备,包括处理器和存储有计算机程序的存储器,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述微服务消息调度的方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述微服务消息调度的方法的步骤。
CN202111265281.XA 2021-10-28 2021-10-28 微服务消息调度的方法、装置、电子设备及存储介质 Pending CN116048826A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111265281.XA CN116048826A (zh) 2021-10-28 2021-10-28 微服务消息调度的方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111265281.XA CN116048826A (zh) 2021-10-28 2021-10-28 微服务消息调度的方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN116048826A true CN116048826A (zh) 2023-05-02

Family

ID=86115118

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111265281.XA Pending CN116048826A (zh) 2021-10-28 2021-10-28 微服务消息调度的方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116048826A (zh)

Similar Documents

Publication Publication Date Title
CN109639572B (zh) 路由管理方法、装置及微服务系统
CN107590072B (zh) 一种应用开发和测试的方法和装置
US11526386B2 (en) System and method for automatically scaling a cluster based on metrics being monitored
US20170220564A1 (en) On-demand mailbox synchronization and migration system
US8898520B1 (en) Method of assessing restart approach to minimize recovery time
US20090100289A1 (en) Method and System for Handling Failover in a Distributed Environment that Uses Session Affinity
CN109788068B (zh) 心跳状态信息上报方法、装置和设备及计算机存储介质
CN109743358A (zh) 异步消息接口熔断控制方法、装置、计算机设备及存储介质
US20090175279A1 (en) Method and device for providing qos control capability for a presence server and system thereof
CN107908488B (zh) 消息请求接口交互方法、装置、计算机设备及存储介质
CN111858007A (zh) 一种基于消息中间件的任务调度方法方法和装置
CN112783672B (zh) 一种远程过程调用处理方法及系统
CN111200606A (zh) 深度学习模型任务处理方法、系统、服务器及存储介质
JP4834622B2 (ja) ビジネスプロセス運用管理システム、方法、プロセス運用管理装置およびそのプログラム
US20220182851A1 (en) Communication Method and Apparatus for Plurality of Administrative Domains
KR101301447B1 (ko) 독립적인 메시지 저장소 및 메시지 전송 에이전트
Chen et al. QoS evaluation of JMS: An empirical approach
US20100067402A1 (en) Middleware components for bundling service invocations
CN113645260A (zh) 业务重试方法、装置、存储介质及电子设备
CN116048826A (zh) 微服务消息调度的方法、装置、电子设备及存储介质
CN114138371B (zh) 配置动态加载方法、装置及计算机设备、存储介质
US10419368B1 (en) Dynamic scaling of computing message architecture
EP3756310B1 (en) Method and first node for managing transmission of probe messages
CN110162415B (zh) 用于处理数据请求的方法、服务器、装置及存储介质
US8990320B2 (en) Method, apparatus and computer program for message handling

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