CN114020453A - 服务总线消息处理方法、服务总线系统、电子设备及介质 - Google Patents
服务总线消息处理方法、服务总线系统、电子设备及介质 Download PDFInfo
- Publication number
- CN114020453A CN114020453A CN202111250488.XA CN202111250488A CN114020453A CN 114020453 A CN114020453 A CN 114020453A CN 202111250488 A CN202111250488 A CN 202111250488A CN 114020453 A CN114020453 A CN 114020453A
- Authority
- CN
- China
- Prior art keywords
- message
- service
- linked list
- service bus
- processing method
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明涉及一种服务总线的消息处理方法、服务总线系统、电子设备及介质。该方法包括:在服务订阅消息ID的情况下,将已经注册到所述服务总线的服务加入到所述消息ID对应的消息链表中;在服务发布消息的情况下,根据所述消息的消息ID找到对应的消息链表,从所述消息链表中取出订阅所述消息ID的服务,并将所述消息传递给所述服务,其中,在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储。本发明通过采用消息队列与内存池管理方案实现,以很小的开销实现了服务之间的消息传递,且裁剪简单、维护方便、移植便捷。
Description
技术领域
本发明涉及通信领域,更具体地,涉及一种服务总线的消息处理方法、服务总线系统、电子设备及介质。
背景技术
当前软件内部普遍存在关系复杂,应用与应用之间关系紧密,接口交错,系统的维护性,稳定性,延展性低的问题,需要寻找一种接口统一、维护方便、移植便捷的方式,即服务总线。
发明内容
针对现有技术中的问题,本发明提供了一种服务总线的消息处理方法、服务总线系统、电子设备及介质。
第一方面,本发明提供了一种服务总线的消息处理方法,所述方法包括:
在服务订阅消息ID的情况下,将已经注册到所述服务总线的服务加入到所述消息ID对应的消息链表中;
在服务发布消息的情况下,根据所述消息的消息ID找到对应的消息链表,从所述消息链表中取出订阅所述消息ID的服务,并将所述消息传递给所述服务,
其中,在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储。
进一步地,所述方法还包括:实时遍历所述消息链表,并且在所述消息链表中有消息的情况下,将所述消息取出转发给订阅所述消息的消息ID的服务。
进一步地,将所述消息传递给所述服务包括:以同步方式或异步方式将所述消息传递给所述服务。
进一步地,在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储,包括:在进行堆的操作之前,将所述内存块加锁,并且在进行堆的操作之后,将所述内存块释放锁。
进一步地,所述内存块包括大小为4字节、32字节、256字节、1024字节和/或4096字节的内存块。
进一步地,所述服务包括消息处理单元和后台处理单元。
进一步地,所述方法还包括:将所有服务产生的消息进行存储,并转达所有消息到指定的服务,并在所述指定的服务使用完消息之后进行资源回收。
第二方面,本发明提供了一种服务总线的系统,所述系统包括
消息队列单元,用于在服务订阅消息ID的情况下,将已经注册到所述服务总线的服务加入到所述消息ID对应的消息链表中;
消息调度单元,用于在服务发布消息的情况下,根据所述消息的消息ID找到对应的消息链表,从所述消息链表中取出订阅所述消息ID的服务,并将所述消息传递给所述服务;以及
内存池管理单元,用于在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储。
第三方面,本发明还提供了一种电子设备,包括:包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面中任一项所述服务总线的消息处理方法的步骤。
第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面中任一项所述服务总线的消息处理方法的步骤。
本发明通过采用消息队列与内存池管理方案实现,以很小的开销实现了服务之间的消息传递,且裁剪简单、维护方便、移植便捷。本发明以应用服务为基础,通过服务总线与数据协议进行应用服务之间数据传递。统一的系统接口及规范,支持标准posix的应用,使用linux标准的设备,文件,网络接口规范,脱离具体的操作系统。具有以下优点:裁剪简单,将应用做成一种系统的服务,模块形式存在,相互之间通过消息总线传递数据,而非通过程序函数接口。可以非常方便的裁剪、新增新服务功能;维护方便,服务与服务之间通过规范的协议规定去进行数据交互,不关注服务本身业务逻辑,因此修改某个服务时,不影响其他服务功能,利于开发维护;移植便捷,统一的系统接口及规范,可以非常方便进行不同系统之间的移植;体积小,此方案总代码量不到1000行,可以融入各种存储要求严格的嵌入式方案中。
附图说明
图1是示出根据本公开的实施例的服务之间交互的示例的图;
图2是示出根据本公开的实施例的服务总线的消息处理方法的示意图;
图3是示出根据本公开的实施例的服务总线的示意图;以及
图4是电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
根据本发明,服务总线包含消息队列、消息调度单元、内存池管理三大部分,消息的交互如下所示:
定义服务A、服务B两个服务,分别采用(os_error_tservice_register(constchar*name,struct service_ops*ops,Scheduler_t*msg_task,Scheduler_t*console_task,server_mp_cfg*mp_cfg))服务注册接口,将两个服务注册到消息总线上。
name:服务名称
ops:服务操作方法,包含消息初始化接口、消息反初始化接口、消息调度单元接口、后台处理器接口。
msg_task:消息调度单元参数
Console_task:后台调度单元参数
mp_cfg:内存配置,内存池根据大小分为4字节、32字节、256字节、1024字节、4096字节5类;消息注册时需要指明此服务使用各个内存类型的个数;在服务总线启动时再统一分配对应内存空间。
服务总线初始化,调用(void service_bus_first_init(void))总线初始化接口即可,内部(void service_bus_first_init(void))接口具体实现部分)会初始化消息链表和服务链表。消息链表中存储了订阅此消息的各个服务;服务链表存储的是注册到总线的服务。
服务总线启动,调用(os_error_t service_start(void))接口。此接口内从服务链表中取出对应服务,根据服务内存配置,计算出各内存类型个数及大小,并进行申请;创建各个服务的消息处理器、后台处理器线程。到此,整个服务总线已正常运行,后续是消息交互说明。
服务A在后台处理任务中调用服务接口(os_error_tservice_msg_publish(uint32_t msg_id,void*payload,uint32_t size,int8_tsync))发布消息C到服务总线的消息队列中。发布消息接口说明如下msg_id:消息ID,每一个消息都有一个唯一的ID,可以根据自身业务定义,需要保证唯一性。
payload:消息内容指针,指向需要发送的消息。
size:消息大小
sync:消息同步标记,1代表消息同步,即此接口会阻塞,直到所有消息被处理完成;0代表异步,会不阻塞。
服务总线的消息调度单元有单独线程维护,实时遍历消息队列,当发现消息队列中有消息C时,将消息C取出转发给已订阅的服务B,消息订阅采用(os_error_t service_msg_subscribe(char*name,uint32_tmsg_id))消息订阅接口,name:自身服务名称
msg_id:消息ID,如果需要接收消息C,则此处填写消息C对应ID。
服务B的消息处理任务进行消息C的处理。
服务总线转发消息C给全部订阅的服务处理后,进行资源的释放。
以上的消息处理包括同步处理与异步处理两种方式。同步方式处理过程:消息调度器将消息C取出传递给已订阅的服务B,并等待服务B将消息C处理完成,然后再进行下一条消息的传递、处理。异步方式处理:消息调度器将消息C传递给已订阅的服务B,会直接进行下一条消息的传递、处理。
以下表1示出了个各个接口的细节参数。
表1接口参数
为了更请楚地示出本发明,以下结合附图对服务总线进行描述。
图1是示出根据本公开的实施例的服务之间交互的示例的图。如图1所示,服务A/B表示两个服务,每个服务由消息处理任务、后台处理任务组成;其中消息处理任务负责接收、处理来自其它服务或者应用的消息,后台处理任务负责服务的后台处理部分,可产生新消息发送给其它服务或应用。
服务总线,包含消息队列、消息调度单元、内存池管理三大部分。图2示出了服务总线的消息处理方法,该方法包括步骤S201,具体如下所示:
①消息队列:消息队列使用链表实现,每一个消息ID都有一个单独的链表,每个节点存储的是订阅此消息的服务;当有服务订阅(os_error_t service_msg_subscribe(char*name,uint32_t msg_id))一个消息ID时,消息订阅接口根据参数name从服务链表中取出已注册到总线的服务,并将其加入到消息链表中。②消息调度单元是将所有服务产生的消息,有效的进行存储,并转达所有消息到指定的服务,并在服务使用完成消息后进行资源回收。当一个服务发送消息时(os_error_t service_msg_publish(uint32_t msg_id,void*payload,uint32_tsize,uint8_t sync)),内部(os_error_t service_msg_publish(uint32_tmsg_id,void*payload,uint32_t size,uint8_t sync)接口实现部分)根据消息ID找到对应消息链表,且从消息链表中取出订阅此消息ID的服务,将消息传递给此服务,完成消息的调度过程。③内存池管理,信息发送过程中需要频繁申请和释放内存,直接对堆操作会产生大量的内存碎片,采用内存池管理模块解决这个问题。整个系统内存以大小分为4字节、32字节、256字节、1024字节、4096字节5类,每一块内存有一个使用标记,已使用则标记1,未使用则标记0;在总线启动接口中进行申请各个大小的总体空间。在消息发布时,根据消息大小找到合适分类且未被使用的内存块,如发生一个4字节内容,则使用4字节类型;发送100字节,则使用256字节类型;每个内存块操作前会加锁,操作后释放锁。也就是说,每个消息有一个信号量来维护消息产生与消费的互斥关系,消息调度单元中将消息传递一次,进行一次V操作,服务中消费一次消息,进行一次P操作,当信号量等于0时,在内存池中对此消息进行释放。
如上所述,本发明通过采用消息队列与内存池管理方案实现,以很小的开销实现了服务之间的消息传递,且裁剪简单、维护方便、移植便捷。
与现有技术相比,本发明的方案不需要依赖驱动,且采用内存池管理,不会产生内存碎片,并且支持同步、异步操作,能满足更多的应用场景。
图3为服务总线的结构示意图。参照图3,该服务总线300包括:
消息队列单元301,用于在服务订阅消息ID的情况下,将已经注册到所述服务总线的服务加入到所述消息ID对应的消息链表中;
消息调度单元303,用于在服务发布消息的情况下,根据所述消息的消息ID找到对应的消息链表,从所述消息链表中取出订阅所述消息ID的服务,并将所述消息传递给所述服务;
内存池管理单元305,用于在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储。
由以上可知,服务总线300的各个单元可以分别执行参照上述实施例描述的处理方法中的各个步骤,此处将不再对其细节进行描述。
由以上可知,本发明通过采用消息队列与内存池管理方案实现,以很小的开销实现了服务之间的消息传递,且裁剪简单、维护方便、移植便捷。本发明以应用服务为基础,通过服务总线与数据协议进行应用服务之间数据传递。统一的系统接口及规范,支持标准posix的应用,使用linux标准的设备,文件,网络接口规范,脱离具体的操作系统。
另一方面,本发明提供了一种电子设备。如图4所示,电子设备400包括处理器401、存储器402、通信接口403和通信总线404。
其中,处理器401、存储器402、通信接口403通过通信总线404完成相互间的通信;
处理器401用于调用存储器402中的计算机程序,处理器401执行计算机程序时实现如上所述的本发明实施例所提供的服务总线的消息处理方法的步骤。
此外,上述存储器中的计算机程序可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干计算机程序以使得一台计算机设备(可以是个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上所述的本发明实施例所提供的服务总线的消息处理方法的步骤。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
最后应说明的是:以上实施例仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种服务总线的消息处理方法,其特征在于,所述方法包括:
在服务订阅消息ID的情况下,将已经注册到所述服务总线的服务加入到所述消息ID对应的消息链表中;
在服务发布消息的情况下,根据所述消息的消息ID找到对应的消息链表,从所述消息链表中取出订阅所述消息ID的服务,并将所述消息传递给所述服务,
其中,在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储。
2.根据权利要求1所述的服务总线的消息处理方法,其特征在于,还包括:实时遍历所述消息链表,并且在所述消息链表中有消息的情况下,将所述消息取出转发给订阅所述消息的消息ID的服务。
3.根据权利要求1所述的服务总线的操作方法,其特征在于,将所述消息传递给所述服务包括:以同步方式或异步方式将所述消息传递给所述服务。
4.根据权利要求1所述的服务总线的消息处理方法,其特征在于,其中,在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储,包括:在进行堆的操作之前,将所述内存块加锁,并且在进行堆的操作之后,将所述内存块释放锁。
5.根据权利要求4所述的服务总线的消息处理方法,其特征在于,所述内存块包括大小为4字节、32字节、256字节、1024字节和/或4096字节的内存块。
6.根据权利要求1所述的服务总线的消息处理方法,其特征在于,所述服务包括消息处理单元和后台处理单元。
7.根据权利要求1-6中任一项所述的服务总线的消息处理方法,其特征在于,还包括:将所有服务产生的消息进行存储,并转达所有消息到指定的服务,并在所述指定的服务使用完消息之后进行资源回收。
8.一种服务总线系统,其特征在于,所述系统包括:
消息队列单元,用于在服务订阅消息ID的情况下,将已经注册到所述服务总线的服务加入到所述消息ID对应的消息链表中;
消息调度单元,用于在服务发布消息的情况下,根据所述消息的消息ID找到对应的消息链表,从所述消息链表中取出订阅所述消息ID的服务,并将所述消息传递给所述服务,
内存池管理单元,用于在服务发布消息的情况下,在内存池中搜索与所述消息的大小对应的未被使用的内存块,进行消息存储。
9.一种电子设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1-7中任一项所述服务总线的消息处理方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述服务总线的消息处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111250488.XA CN114020453A (zh) | 2021-10-26 | 2021-10-26 | 服务总线消息处理方法、服务总线系统、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111250488.XA CN114020453A (zh) | 2021-10-26 | 2021-10-26 | 服务总线消息处理方法、服务总线系统、电子设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114020453A true CN114020453A (zh) | 2022-02-08 |
Family
ID=80057899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111250488.XA Pending CN114020453A (zh) | 2021-10-26 | 2021-10-26 | 服务总线消息处理方法、服务总线系统、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114020453A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115277750A (zh) * | 2022-06-30 | 2022-11-01 | 重庆长安汽车股份有限公司 | 一种多系统智能座舱通信组件 |
-
2021
- 2021-10-26 CN CN202111250488.XA patent/CN114020453A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115277750A (zh) * | 2022-06-30 | 2022-11-01 | 重庆长安汽车股份有限公司 | 一种多系统智能座舱通信组件 |
CN115277750B (zh) * | 2022-06-30 | 2023-05-26 | 重庆长安汽车股份有限公司 | 一种多系统智能座舱通信组件 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108449410B (zh) | 一种云平台中消息管理方法、系统及相关装置 | |
CN111182025B (zh) | 一种报文处理方法、装置、服务器及存储介质 | |
US20180365254A1 (en) | Method and apparatus for processing information flow data | |
CN112988423A (zh) | 消息消费、消息分发方法、装置、服务器及存储介质 | |
US10530726B2 (en) | Email notifications | |
CN110651256B (zh) | 用于在软件更新期间防止服务中断的系统和方法 | |
US8606908B2 (en) | Wake-up server | |
CN111064626B (zh) | 配置更新方法、装置、服务器及可读存储介质 | |
CN112583931A (zh) | 消息处理方法、消息中间件、电子设备和存储介质 | |
CN107786350B (zh) | 一种恢复网络设备的出厂配置的方法、装置及网络设备 | |
US8751560B2 (en) | Method and device arrangement for managing a client/server environment | |
CN114020453A (zh) | 服务总线消息处理方法、服务总线系统、电子设备及介质 | |
CN113971098A (zh) | 一种RabbitMQ消费管理方法及系统 | |
CN113220432A (zh) | 多云互联方法、装置、设备、存储介质及产品 | |
CN111756844A (zh) | 一种多语言消息代理方法及装置 | |
CN111614702B (zh) | 一种边缘计算方法以及边缘计算系统 | |
CN115361382B (zh) | 基于数据群组的数据处理方法、装置、设备和存储介质 | |
CN116150273A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN113076380B (zh) | 数据同步方法、装置、系统、设备及存储介质 | |
CN115225482A (zh) | 一种基于Kubernetes进行Pod容器网络配置的方法及装置 | |
CN114513504A (zh) | 消息队列多云适配的方法、装置、设备及可读存储介质 | |
CN110935168B (zh) | 用于全球同服架构的分布式id生成方法、装置及设备 | |
CN107454021B (zh) | 一种通信方法及装置 | |
CN112231405A (zh) | 数据存储装置 | |
EP3193482B1 (en) | Message processing method and apparatus |
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 |