消息处理方法技术

技术编号:39664904 阅读:9 留言:0更新日期:2023-12-11 18:28
本申请公开了一种消息处理方法

【技术实现步骤摘要】
消息处理方法、装置及设备


[0001]本申请属于通信
,具体涉及一种消息处理方法

装置及设备


技术介绍

[0002]消息队列
(Message Queue

MQ)
是一种基于先进先出
(FIFO)
的队列模型中间件

消息发送后可以立即返回,由消息系统确保消息的可靠传递

消息生产者
(Producer)
只需将消息发布到
MQ
中,无需管谁来取消息和如何取消息;消息消费者
(Consumer)
只管从
MQ
中取消息而不用管是谁发布的以及如何发布的

[0003]现有技术中,消息统一放到一个消息队列中,启动一个程序单线程或者多线程去消费并处理消息

因此,经常需要为每个
MQ
单独分配线程进行消息消费,然而在数据流过大时,由于线程处理能力固定,导致无法及时处理数据流,造成线程阻塞


技术实现思路

[0004]本申请实施例的目的是提供一种消息处理方法

装置及设备,能够提高消息处理的效率

[0005]第一方面,本申请实施例提供了一种应用于中间件服务器的消息处理方法,包括:
[0006]根据所述中间件服务器预先配置的目标队列,确定目标消费端可接收消息的数量,所述目标队列为所述目标消费端的队列;
[0007]在所述目标消费端可接收消息的数量大于零的情况下,若所述中间件服务器预先配置的缓存队列中缓存有至少一个消息,将所述缓存队列中的目标消息传输至所述中间件服务器的目标线程池中,其中,所述缓存队列与所述目标队列对应,且所述缓存队列用于缓存所述中间件服务器从目标生产端拉取的消息;所述目标消息为所述缓存队列中位于队头的消息;
[0008]将所述目标线程池中的目标消息推送至所述目标消费端

[0009]第二方面,本申请实施例提供了一种应用于中间件服务器的消息处理装置,包括:
[0010]第一确定模块,用于根据所述中间件服务器预先配置的目标队列,确定目标消费端可接收消息的数量,所述目标队列为所述目标消费端的队列;
[0011]第一传输模块,用于在所述目标消费端可接收消息的数量大于零的情况下,若所述中间件服务器预先配置的缓存队列中缓存有至少一个消息,将所述缓存队列中的目标消息传输至所述中间件服务器的目标线程池中,其中,所述缓存队列与所述目标队列对应,且所述缓存队列用于缓存所述中间件服务器从目标生产端拉取的消息;所述目标消息为所述缓存队列中位于队头的消息;
[0012]第一推送模块,用于将所述目标线程池中的目标消息推送至所述目标消费端

[0013]第三方面,本申请实施例提供了一种电子设备,包括处理器和存储器,存储器存储可在处理器上运行的程序或指令,程序或指令被处理器执行时实现如第一方面所述方法的步骤

Protocol)
的开源消息代理软件
(
亦称面向消息的中间件
)。RabbitMQ
服务器是用
Erlang
语言编写的,用于在分布式系统中存储转发消息

[0028]RabbitMQ
中的
Broker
:消息队列服务进程,此进程包括两个部分:
Exchange

Queue(
消息队列
)。
[0029]Exchange
:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑

[0030]RabbitMQ
中的
Queue
:存储消息的队列,消息到达队列并转发给指定的消息消费者

[0031]Producer
:消息生产者,即生产方客户端,生产方客户端将消息发送
[0032]Consumer
:消息消费者,即消费方客户端,接收
MQ
转发的消息

[0033]RocketMQ
:一个分布式消息和流数据平台,具有低延迟

高性能

高可靠性

万亿级容量和灵活的可扩展性

[0034]RocketMQ
中的
Broker

RocketMQ
的核心模块,负责接收并存储消息,同时提供
Push/Pull
接口来将消息发送给
Consumer。
[0035]MQ

proxy
:作为原有
RabbitMQ

SDK

RocketMQ
之间的桥梁,负责生产消费
amqp
协议到
rocketmq
私有通信协议之间的相互转换

[0036]消息中间件通过提供消息传递和消息排队模型,在分布式环境下扩展进程间的通信

在实际应用环境中,例如短信通知服务

数据统计服务等都是依赖于消息中间件去消费这条消息来完成自己的业务逻辑

对于消息中间件,常见的角色大致有生产者
(producer)、
消费者
(consumer)
以及消息队列
(Message Queue)
,生产者负责生产消息,消息中间件将消息存放至消息队列,消费者从消息队列中获取消息并消费消息

其中,消息
(Message)
是指在应用间传送的数据

消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象

消息队列是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递

生产者只管把消息发布到消息队列中而不用管谁来取,消费者只管从消息队列中取消息而不管是谁发布的

这样生产者和消费者都不用知道对方的存在

因此,在业务量较大的情况下使用消息中间件可以实现系统间的解耦

异步化

削峰填谷等

[0037]然而,消息中间件的消费能力受限于消息中间件本身的架构与设计

例如,
RabbitMQ
是实现了高级消息队列协议
(AMQP,Advanced Message Queuing Protocol)
的开源消息代理软件
(
亦称面向消息的中间件
)
,用
Erlang
语言编写,由于
erlang
语言的特性,
MQ本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种消息处理方法,其特征在于,应用于中间件服务器,所述方法包括:根据所述中间件服务器预先配置的目标队列,确定目标消费端可接收消息的数量,所述目标队列为所述目标消费端的队列;在所述目标消费端可接收消息的数量大于零的情况下,若所述中间件服务器预先配置的缓存队列中缓存有至少一个消息,将所述缓存队列中的目标消息传输至所述中间件服务器的目标线程池中,其中,所述缓存队列与所述目标队列对应,且所述缓存队列用于缓存所述中间件服务器从目标生产端拉取的消息;所述目标消息为所述缓存队列中位于队头的消息;将所述目标线程池中的目标消息推送至所述目标消费端
。2.
根据权利要求1所述的方法,其特征在于,所述目标队列中元素的数量与所述目标消费端可接收消息的数量匹配;所述将所述缓存队列中的目标消息传输至所述中间件服务器的目标线程池中之后,还包括:在所述目标队列中减少一个元素,以更新所述目标队列
。3.
根据权利要求2所述的方法,其特征在于,所述在所述目标队列中减少一个元素,包括:从所述目标队列中提取目标元素,所述目标元素为所述目标队列中任一元素,所述目标元素用于指示所述中间件服务器与所述目标消费端之间的传输通道;将所述目标线程池中的目标消息推送至所述目标消费端,包括:将所述目标线程池中的目标消息通过所述传输通道推送至所述目标消费端
。4.
根据权利要求2所述的方法,其特征在于,所述将所述目标线程池中的目标消息推送至所述目标消费端之后,还包括:接收所述目标消费端发送的反馈消息,所述反馈消息用于指示所述目标消费端已基于所述目标消息完成消费;响应于所述反馈消息,在所述目标队列中增加一个元素,以更新所述目标队列
。5.
根据权利要求1所述的方法,其特征在于,所述中间服务器中预先配置有
N
个第一队列和
N
个第二队列,所述
N
个第一队列分别为
N
个消费端对应的队列,
N
个第一队列与
N
个第二队列对应,
N
为正整数;所述根据所述中间件服务器预先配置的目标队列,确定目标消费端可接收消息的数量,包括:在第
K
‑1个消费端可接收消息的数量为零的情况下,根据所述中间件服务器预先配置的第
K
个第一队列,确定所述第
K
个消费端可接收消息的数量,其中,所述目标队列为所述第
K
个第一队列,所述目标消费端为第
K
个消费端,所述缓存队列为所述
N
个第二队列中与所述第
K
个第一队列对应的队列,
K
为大于1的整数且
K
小于等于
N。6.
根据权利要求5所述的方法,其特征在于,所述在所述目标消费端可接收消息的数量大于零的情况下,若所述中间件服务器预先配置的缓存队列中缓存有至少一个消息,将所述缓存队列中的目标消息传输至所述中间件服务器的目标线程池中,包括:在所述第
K
个消费端...

【专利技术属性】
技术研发人员:廖建伟
申请(专利权)人:维沃移动通信有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1