CN109885410B - 消息发送方法、装置、计算机设备和存储介质 - Google Patents
消息发送方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN109885410B CN109885410B CN201910019563.8A CN201910019563A CN109885410B CN 109885410 B CN109885410 B CN 109885410B CN 201910019563 A CN201910019563 A CN 201910019563A CN 109885410 B CN109885410 B CN 109885410B
- Authority
- CN
- China
- Prior art keywords
- message
- queue
- consumption
- message queue
- rabbitmq
- 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
Abstract
本发明涉及一种基于RabbitMQ的消息发送方法、装置、计算机设备和存储介质,方法包括步骤:接收生产端发送的消息和队列标识,然后从预先声明的多个消息队列中确定于该队列标识相对应的消息队列,接着可以将生产端需要发送的消息投递到该消息队列,通过该消息队列将消息发送给与这个消息队列绑定的一个消费端,使得该消费端可以处理该生产端发送的消息,这样生产端就可以根据实际需求设置相应的队列标识将消息发送给特定的消费端进行处理,使得该生产端的所有操作都能够命中指定的消费端,避免了生产端的消息被轮询发到多个消费端处理,提高了消息发送的灵活性,而且只需要在一个消费端上对消息进行枷锁即可避免并发问题,提高了并发性能。
Description
技术领域
本发明涉及互联网技术领域,特别是涉及一种基于RabbitMQ的消息发送方法、基于RabbitMQ的消息发送装置、计算机设备和计算机可读存储介质。
背景技术
RabbitMQ是一个遵循AMQP协议的消息中间件,它从生产端接收消息并发送给消费端,在这个消息递送的过程当中,根据生产端设定的规则进行消息的路由、缓存和持久化。
传统技术在使用RabbitMQ将生产端的消息发送给消费端时,由于对于同一个服务,消费端集群会部署多个消费端节点去对RabbitMQ中与该服务对应的消息队列进行监听,然后RabbitMQ会以轮询的方式轮流把这个消息队列中的消息发送给各个消费端,但这种将消息以轮询的方式发送给多个消费端的技术灵活性差,在多线程访问的时候还会带来并发性差的问题。
发明内容
基于此,有必要针对传统技术发送消息的灵活性差的技术问题,提供一种基于RabbitMQ的消息发送方法、基于RabbitMQ的消息发送装置、计算机设备和计算机可读存储介质。
一种基于RabbitMQ的消息发送方法,包括步骤:
接收生产端发送的消息和队列标识;
从预先声明的多个消息队列中确定与所述队列标识相对应的消息队列;
将所述消息发送给与所述消息队列相绑定的消费端;其中,各个所述消息队列分别绑定一个消费端。
一种基于RabbitMQ的消息发送装置,包括:
接收模块,用于接收生产端发送的消息和队列标识;
确定模块,用于从预先声明的多个消息队列中确定与所述队列标识相对应的消息队列;
发送模块,用于将所述消息发送给与所述消息队列相绑定的消费端;其中,各个所述消息队列分别绑定一个消费端。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的基于RabbitMQ的消息发送方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的基于RabbitMQ的消息发送方法的步骤。
上述基于RabbitMQ的消息发送方法、装置、计算机设备和存储介质,接收生产端发送的消息和队列标识,然后根据该队列标识从预先声明的多个消息队列中确定于该队列标识相对应的消息队列,接着可以将生产端需要发送的消息投递到该消息队列当中,通过该消息队列将消息发送给与这个消息队列绑定的一个消费端,使得该消费端可以处理该生产端发送的消息,这样生产端就可以根据实际需求设置相应的队列标识将消息发送给特定的消费端进行处理,使得该生产端的所有操作都能够命中指定的消费端,避免了生产端的消息被轮询发到多个消费端处理,提高了消息发送的灵活性,而且只需要在一个消费端上对消息进行枷锁即可避免并发问题,提高了并发性能。
附图说明
图1为一个实施例中基于RabbitMQ的消息发送方法的应用场景图;
图2为一个实施例中基于RabbitMQ的消息发送方法的流程示意图;
图3为一个实施例中基于RabbitMQ的消息发送方法的工作原理图;
图4为一个实施例中基于RabbitMQ的消息发送装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供的基于RabbitMQ的消息发送方法,可以应用于如图1所示的应用场景当中,图1为一个实施例中基于RabbitMQ的消息发送方法的应用场景图,其中,生产端110可以通过消息队列120将消息发送给消费端,对于同一个服务,一般会通过消费端集群130部署多个节点去监听RabbitMQ的一个消息队列120以消费生产端110发送的消息,而RabbitMQ提供了轮询机制轮流把生产端110发送的消息发送给消费端集群130中的不同消费端应用的,具体来说,RabbitMQ的消息队列接收了生产端110发送的消息1、消息2、消息3和消息4后,会将消息1发送给第一消费端130a、将消息2发送给第二消费端130b、将消息3发送给第三消费端130c以及将消息4发送给第一消费端130a,这样,生产端110的消息会被分配给不同的消费端进行消费,灵活性很差。本发明实施例提供的基于RabbitMQ的消息发送方法,能够根据生产端110的实际需求将生产端110的消息发送给特定的消费端进行消费,提高消息发送的灵活性,还能避免消息的并发问题。其中,生产端110可以包括但不限于个人计算机、笔记本电脑、智能手机和平板电脑等终端设备,消费端集群可以通过多个服务器组成的服务器集群来实现,消费端可以是该服务器集群中的服务器。
在一个实施例中,提供了一种基于RabbitMQ的消息发送方法,参考图2,图2为一个实施例中基于RabbitMQ的消息发送方法的流程示意图,该方法可以应用于RabbitMQ消息队列服务器,该RabbitMQ的消息发送方法可以包括以下步骤:
步骤S101,接收生产端发送的消息和队列标识。
如图3所示,图3为一个实施例中基于RabbitMQ的消息发送方法的工作原理图,生产端110可以将需要发送给消费端的消息投递给RabbitMQ消息队列服务器150,RabbitMQ消息队列服务器150可以接收生产端110发送的消息,由于RabbitMQ消息队列服务器150需要将生产端110的上述消息投递至特定的消息队列当中,所以生产端110还需要向RabbitMQ消息队列服务器150发送队列标识,该队列标识主要用于RabbitMQ消息队列服务器150将所述消息投递到指定的消息队列当中,该队列标识可以是与消息队列的序号相对应的数字和/或字符等,能识别出用于投递该消息的相应消息队列即可。
步骤S102,从预先声明的多个消息队列中确定与队列标识相对应的消息队列。
本步骤中,RabbitMQ消息队列服务器150可以预先声明多个消息队列,例如先为一个项目声明多个消息队列,这样,在RabbitMQ消息队列服务器150接收到生产端110发送的队列标识以后,可以根据该队列标识从预先声明的多个消息队列中查询出与队列标识相对应的消息队列,该查询出的消息队列即可用于投递生产端110发送的消息。
具体来说,由于消息队列与队列标识是一一对应的,例如消息队列1对应队列标识a、消息队列2对应队列标识b和消息队列3对应队列标识c,则RabbitMQ消息队列服务器150接收到队列标识a时,则查询出与该队列标识a相对应的消息队列1,该消息队列1就是用于投递生产端110的上述消息的消息队列。
步骤S103,将消息发送给与该消息队列相绑定的消费端。
本步骤中,RabbitMQ消息队列服务器150的每个消息队列都分别与一个消费端绑定,而且一个消费队列仅绑定一个消费端,这样,某个消息队列只能将该消息队列中的消息发送给与之绑定的一个消费端。如图3所示,消息队列1与第四消费端160a相绑定,消息队列2与第五消费端160b相绑定,消息队列3与第五消费端160b相绑定,这样消息队列1的消息只能发送给第四消费端160a而不能发送给第五消费端160b,消息队列2和消息队列3的消息都只能发送给第五消费端160b,而不能发送给第四消费端160a。
RabbitMQ消息队列服务器150可以将消息投递给与生产端110发送的队列标识相对应的消息队列,使得该消息队列将该消息发送给绑定的消费端。具体来说,假设生产端110发送的队列标识相对应的消息队列是消息队列1,RabbitMQ消息队列服务器150可以将生产端110发送的消息投递给消息队列1,由于该消息队列1与第四消费端160a相绑定,所以消息队列1会将生产端110发送的消息发送给第四消费端160a进行消费。
这样,生产端110可以根据实际需要设置需要投递的消息队列,使得生产端110发送的消息每次都能命中指定的消费端,实现生产端根据自定义的业务规则将消息分配至不同消费端进行处理的目的,而且不同的生产端还可以将消息分别发送给不同的消费端进行处理,使得一个消费端只需要处理n/m个生产端的信息(n表示生产端的数量,m表示消费端的数量),消费端的本地缓存也只需要缓存一部分生产端的信息,提高了缓存效率,有利于提高负载均衡性能。
上述基于RabbitMQ的消息发送方法,接收生产端发送的消息和队列标识,然后根据该队列标识从预先声明的多个消息队列中确定于该队列标识相对应的消息队列,接着可以将生产端需要发送的消息投递到该消息队列当中,通过该消息队列将消息发送给与这个消息队列绑定的一个消费端,使得该消费端可以处理该生产端发送的消息,这样生产端就可以根据实际需求设置相应的队列标识将消息发送给特定的消费端进行处理,使得该生产端的所有操作都能够命中指定的消费端,避免了生产端的消息被轮询发到多个消费端处理,提高了消息发送的灵活性,而且只需要在一个消费端上对消息进行枷锁即可避免并发问题,提高了并发性能。
在一个实施例中,还可以包括如下步骤:
确定消费端的数量;根据消费端的数量声明多个消息队列。
本实施例可以在接收生产端的消息和队列标识之前,根据消费端的数量声明多个消息队列并设置消息队列的数量,其中,需要将消息队列的数量设置为大于或等于消费端的数量,也就是说,如果消费端的数量是2,则需要将消息队列的数量设置为2个或2个以上。这样声明消息队列的数量可以保证一个消费端对应到至少1个消息队列,使得生产端的一个类型的消息能够被一个消费端消费,如果消息队列的数量小于消费端的数量,多出来的消费端会处于空闲状态,由于一个消费端对应于一个消息队列,再多的消费端就不能再监听消息队列了,如果重复监听某个消息队列的消息,某个消息队列的消息就会轮询发到多个消费端当中,当生产端需要将某个类型的消息发送到指定的消费端时,如果消息队列的数量小于消费端的数量就无法保证该类消息能够命中这个消费端
在一个实施例中,进一步的,还可以包括如下步骤:
步骤S201,设置各个消息队列的队列序号。
本步骤主要是为各个消息队列设置队列序号,由于消息队列的数量是多个,该队列序号主要用于顺序标识各个消息队列。具体的,如果消息队列的数量为3个,则3个消息队列的队列序号可以分别为:$1、$2和$3,3个消息队列的队列名可以表示为:queue_$1、queue_$2和queue_$3。
步骤S202,声明用于接收消息和队列标识的交换器。
在RabbitMQ中,一般通过交换器接收生产端110的消息以及队列标识,该交换器可以用于将生产端110的消息路由到相应的消息队列当中,该交换器可以是主题(Topic)类型的交换器,其中,该交换器可以通过其路由键与多个队列进行绑定,生产端110将交换器的路由键作为队列标识发送给交换器,以使交换器根据该队列标识将消息投递给相应的消息队列。
步骤S203,将交换器的多个路由键分别与各个消息队列的队列序号对应设置。
本步骤主要是将交换器的路由键与消息队列的队列序号进行对应设置。参考图3,消息队列的数量是3个,3个消息队列的队列序号分为是$1、$2和$3,则交换器的路由键的数量也对应设置为3个,路由键1为routingKey_$1、路由键2为routingKey_$2和路由键3为routingKey_$3,其中,routingKey_$1对应消息队列1、routingKey_$2对应消息队列2和routingKey_$3对应消息队列3。这样,当生产端发送的队列标识为routingKey_$1时,交换器即可将生产端的消息投递给消息队列1,以使消息队列1将该消息发送给第四消费端160a。
上述实施例将交换器的路由键与消息队列的队列序号进行绑定,使得生产端可以根据实际业务规则设置路由键作为队列标识,并发送给交换器使得交换器能够将消息投递给相应的消息队列发送给绑定的消费端进行处理。
在一个实施例中,还可以包括如下步骤:
获取消费端在注册时随机分配的设备标识;根据设备标识将消费端集群的各个消费端与各个消息队列进行绑定。
本实施例主要是通过消费端的设备标识与各个消息队列进行绑定。其中,消费者集群可以包括多个消费端,消息队列的数量可以是多个,而一个消息队列仅与一个消费端进行绑定。
当消费端在消费端集群注册时,消费端集群会为其随机生成一个设备标识,该设备标识是唯一值,可以用于区分消费端集群中的各个消费端,消费端可以将该设备标识保存在内容当中,消费端每次上线后也可以将其设备标识以及ip端口信息放到zk里面,zk全称为ZooKeeper,是是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
本实施例中,可以获取消费端集群的各个消费端的设备标识,然后根据该设备标识将消费端集群的各个消费端与各个消息队列进行绑定。具体的,参考图3,假设第四消费端160a的设备标识为c1,第五消费端160b的设备标识为c2,则可以将消息队列1与设备标识为c1的消费端进行绑定,将消息队列2和消息队列3与设备标识为c2的消费端进行绑定。基于唯一性的设备标识能够实现消费端与消息队列的绑定,而且在消息队列的消息堆积的情况下,还可以根据消息队列与设备标识的绑定情况,快速定位出发送消息处理异常的消费端,例如查出其对应消费端的ip端口去定位该消费端,从而对消息队列与消费端的绑定情况进行及时调整。
在一个实施例中,进一步的,根据设备标识将消费端集群的各个消费端与各个消息队列进行绑定的步骤可以包括:
获取各个消息队列的队列序号;根据各个消息队列的队列序号以及各个消费端的设备标识,将各个消息队列以轮询的方式与各个消费端进行绑定。
本实施例主要是将消息队列与消费端以轮询的方式进行绑定。其中,可以获取各个消息队列的队列序号,将各个消息队列的队列序号轮询绑定各个消费端的设备标识,从而实现将各个消息队列与各个消费端进行绑定,而且满足一个消息队列绑定一个消费端的条件。
具体来的,参考图3,假设消息队列1的序号为q1、消息队列2的序号为q2和消息队列3的序号为q3,第四消费端160a的设备标识为c1和第五消费端160b的设备标识为c2,则可以先将q1绑定至c1,接着将q2绑定至c2,最后将q3绑定至q3,使得三个消息队列均绑定一个消费端。
上述实施例通过轮询的方式将消息队列绑定至消费端,能够将消息队列均匀地分配给各个消费端,避免个别消费端的数据处理压力过大,有利于提高负载均衡性能。
在一个实施例中,进一步的,根据设备标识将消费端集群的各个消费端与各个消息队列进行绑定的步骤可以包括:
步骤S301,获取各个消费端的性能指标。
其中,消费端的性能指标主要用于评估该消费端的消息处理能力,可以包括在当前网络宽带条件下该消费端的数据处理效率。本步骤通过消费端集群的主节点的消费端获取该消费端集群的各个消费端的性能指标。
步骤S302,根据性能指标确定各个消费端的队列绑定数量。
本步骤主要是根据各个消费端的性能指标从而确定每个消费端的队列绑定数量,其中,队列绑定数量是指消费端需要绑定的消息队列的数量。
步骤S303,获取各个消息队列的队列序号。
本步骤主要是获取各个消息队列的队列序号。
步骤S304,根据各个消费端的队列绑定数量和设备标识以及各个消息队列的队列序号,将各个消费端与各个消息队列进行绑定。
本步骤可以结合各个消费端的队列绑定数量来将消费端与消息队列进行绑定,其中,性能指标较高的消费端可以绑定较多的消息队列,为性能指标较低的消费端分担数据处理压力,有利于提高消费端的负载均衡能力。
上述实施例考虑到各个消费端的消息处理能力具有一定差异,通过各个消费端的队列绑定数量可以反映出每个消费端的消息处理性能,便于为性能较高的消费端绑定更多的消息队列,减轻性能指标较低的消费端的数据处理压力,提高其负载均衡能力。
在一个实施例中,还可以包括如下步骤:
监听消费端集群的消费端的上下线情况;基于上下线情况将各个消费端与各个消息队列进行重新绑定。
本实施例主要是根据消费端集群的消费端的上下线情况重新将消费端与消息队列进行绑定。其中,上下线情况包括在消费端集群当中有消费端下线或有新的消费端上线,当消费端集群中有消费端上线或下线时,消费端集群的消费端的数量就会发生变化,这时候就需要将各个消费端与各个消息队列进行重新绑定。
具体的,可以通过消费端集群的主节点的消费端监听消费端的上下线情况,参考图3,假设消费端集群160的主节点的消费端为第四消费端160a,则可以通过第四消费端160a实时监听该消费端集群160的消费端的上下线情况,如果监听到第五消费端160b下线,则第四消费端160a会将原先绑定至第五消费端160b的消息队列2和消息队列3重新绑定到第四消费端160a;如果监听到有新的消费端上线,则可以将原先绑定至第五消费端160b的消息队列2或消息队列3绑定到该新的消费端上。该实施例的技术方案,能够确保在有消费端下线的情况下,即使将原绑定至该消费端的消息队列重新绑定到在线的消费端上,避免该消息队列的消息无法处理产生堆积,还能够在有新的消费端上线时,将绑定了过多消息队列的消费端的部分消息队列重新绑定该新的消费端上,有利于提高消费端的负载均衡能力。
在一个实施例中,队列标识可以是生产端根据消息的消息类型、消费端的消息处理类型以及与消费端相绑定的消息队列设置的队列标识。
本实施例中,生产端发送的消息可以包括不同类型的消息,而考虑到不同的消费端在处理不同类型的消息时的处理效率一般不同,消费端的消息处理类型可以反映出该消费端在处理某类消息时的处理效率,因此生产端可以根据消费端的消息处理类型以及待发送消息的消息类型,以及与该消费端相绑定消息队列设置队列标识,从而使得生产端投递的某个类型的消息能够被擅长处理该类型的消费端处理,提高对消息进行处理的灵活性和针对性。
在一个实施例中,提供了一种基于RabbitMQ的消息发送装置,参考图3,图4为一个实施例中基于RabbitMQ的消息发送装置的结构框图,该基于RabbitMQ的消息发送装置可以包括:
接收模块101,用于接收生产端发送的消息和队列标识;
确定模块102,用于从预先声明的多个消息队列中确定与所述队列标识相对应的消息队列;
发送模块103,用于将所述消息发送给与所述消息队列相绑定的消费端;其中,各个所述消息队列分别绑定一个消费端。
在一个实施例中,还可以包括:
数量确定模块,用于确定消费端的数量;
队列声明模块,用于根据消费端的数量声明多个消息队列。
在一个实施例中,还可以包括:
序号设置模块,用于设置各个消息队列的队列序号;
交换器声明模块,用于声明用于接收消息和队列标识的交换器;
路由键设置模块,用于将交换器的多个路由键分别与各个消息队列的队列序号对应设置。
在一个实施例中,还可以包括:
设备标识获取模块,用于获取消费端在注册时随机分配的设备标识;
队列绑定模块,用于根据设备标识将消费端集群的各个消费端与各个消息队列进行绑定。
在一个实施例中,队列绑定模块可以进一步用于:
获取各个消息队列的队列序号;根据各个消息队列的队列序号以及各个消费端的设备标识,将各个消息队列以轮询的方式与各个消费端进行绑定。
在一个实施例中,队列绑定模块可以进一步用于:
获取各个消费端的性能指标;根据性能指标确定各个消费端的队列绑定数量;获取各个消息队列的队列序号;根据各个消费端的队列绑定数量和设备标识以及各个消息队列的队列序号,将各个消费端与各个消息队列进行绑定。
在一个实施例中,还可以包括:
上下线情况监听模块,用于监听消费端集群的消费端的上下线情况;
重新绑定模块,用于基于上下线情况将各个消费端与各个消息队列进行重新绑定。
在一个实施例中,队列标识可以是生产端根据消息的消息类型、消费端的消息处理类型以及与消费端相绑定的消息队列设置的队列标识。
本发明的基于RabbitMQ的消息发送装置与本发明的基于RabbitMQ的消息发送方法一一对应,关于基于RabbitMQ的消息发送装置的具体限定可以参见上文中对于基于RabbitMQ的消息发送方法的限定,在上述基于RabbitMQ的消息发送方法的实施例阐述的技术特征及其有益效果均适用于基于RabbitMQ的消息发送装置的实施例中,在此不再赘述。上述基于RabbitMQ的消息发送装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是RabbitMQ消息队列服务器,其内部结构图可以如图5所示,图5为一个实施例中计算机设备的内部结构图。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库可以用于存储如上任一实施例所述的基于RabbitMQ的消息发送方法的各流程中涉及的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于RabbitMQ的消息发送方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
接收生产端发送的消息和队列标识;从预先声明的多个消息队列中确定与队列标识相对应的消息队列;将消息发送给与该消息队列相绑定的消费端。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
确定消费端的数量;根据消费端的数量声明多个消息队列。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
设置各个消息队列的队列序号;声明用于接收消息和队列标识的交换器;将交换器的多个路由键分别与各个消息队列的队列序号对应设置。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取消费端在注册时随机分配的设备标识;根据设备标识将消费端集群的各个消费端与各个消息队列进行绑定。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取各个消息队列的队列序号;根据各个消息队列的队列序号以及各个消费端的设备标识,将各个消息队列以轮询的方式与各个消费端进行绑定。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取各个消费端的性能指标;根据性能指标确定各个消费端的队列绑定数量;获取各个消息队列的队列序号;根据各个消费端的队列绑定数量和设备标识以及各个消息队列的队列序号,将各个消费端与各个消息队列进行绑定。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
监听消费端集群的消费端的上下线情况;基于上下线情况将各个消费端与各个消息队列进行重新绑定。
上述计算机设备,通过所述处理器上运行的计算机程序,使得该生产端的所有操作都能够命中指定的消费端,避免了生产端的消息被轮询发到多个消费端处理,提高了消息发送的灵活性,而且只需要在一个消费端上对消息进行枷锁即可避免并发问题,提高了并发性能。
本领域普通技术人员可以理解实现如上任一项实施例所述的基于RabbitMQ的消息发送方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
据此,在一个实施例中提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
接收生产端发送的消息和队列标识;从预先声明的多个消息队列中确定与队列标识相对应的消息队列;将消息发送给与该消息队列相绑定的消费端。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
确定消费端的数量;根据消费端的数量声明多个消息队列。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
设置各个消息队列的队列序号;声明用于接收消息和队列标识的交换器;将交换器的多个路由键分别与各个消息队列的队列序号对应设置。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取消费端在注册时随机分配的设备标识;根据设备标识将消费端集群的各个消费端与各个消息队列进行绑定。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取各个消息队列的队列序号;根据各个消息队列的队列序号以及各个消费端的设备标识,将各个消息队列以轮询的方式与各个消费端进行绑定。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取各个消费端的性能指标;根据性能指标确定各个消费端的队列绑定数量;获取各个消息队列的队列序号;根据各个消费端的队列绑定数量和设备标识以及各个消息队列的队列序号,将各个消费端与各个消息队列进行绑定。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
监听消费端集群的消费端的上下线情况;基于上下线情况将各个消费端与各个消息队列进行重新绑定。
上述计算机可读存储介质,通过其存储的计算机程序,使得该生产端的所有操作都能够命中指定的消费端,避免了生产端的消息被轮询发到多个消费端处理,提高了消息发送的灵活性,而且只需要在一个消费端上对消息进行枷锁即可避免并发问题,提高了并发性能。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种基于RabbitMQ的消息发送方法,其特征在于,包括步骤:
接收生产端发送的消息和队列标识;所述队列标识用于识别出投递该消息的相应消息队列;
从预先声明的多个消息队列中确定与所述队列标识相对应的消息队列;
将所述消息发送给与所述消息队列相绑定的消费端;其中,所述消息队列用于接收到所述消息后,将所述消息发送至所述相绑定的消费端;各个所述消息队列分别绑定一个消费端。
2.根据权利要求1所述的基于RabbitMQ的消息发送方法,其特征在于,还包括步骤:
确定所述消费端的数量;
根据所述消费端的数量声明所述多个消息队列;其中,所述消息队列的数量大于或等于所述消费端的数量。
3.根据权利要求2所述的基于RabbitMQ的消息发送方法,其特征在于,还包括步骤:
设置各个所述消息队列的队列序号;
声明用于接收所述消息和队列标识的交换器;其中,所述队列标识为所述交换器的路由键;
将所述交换器的多个所述路由键分别与各个所述消息队列的队列序号对应设置。
4.根据权利要求1所述的基于RabbitMQ的消息发送方法,其特征在于,还包括步骤:
获取所述消费端在注册时随机分配的设备标识;
根据所述设备标识将消费端集群的各个所述消费端与各个所述消息队列进行绑定;其中,一个消息队列绑定一个消费端。
5.根据权利要求4所述的基于RabbitMQ的消息发送方法,其特征在于,
所述根据所述设备标识将消费端集群的各个所述消费端与各个所述消息队列进行绑定的步骤包括:
获取各个所述消费端的性能指标;
根据所述性能指标确定各个所述消费端的队列绑定数量;
获取各个所述消息队列的队列序号;
根据各个所述消费端的队列绑定数量和设备标识以及各个所述消息队列的队列序号,将各个所述消费端与各个所述消息队列进行绑定;
或
所述根据所述设备标识将消费端集群的各个所述消费端与各个所述消息队列进行绑定的步骤包括:
获取各个所述消息队列的队列序号;
根据各个所述消息队列的队列序号以及各个所述消费端的设备标识,将所述各个所述消息队列以轮询的方式与各个所述消费端进行绑定。
6.根据权利要求4所述的基于RabbitMQ的消息发送方法,其特征在于,还包括步骤:
监听所述消费端集群的消费端的上下线情况;
基于所述上下线情况将各个所述消费端与各个所述消息队列进行重新绑定。
7.根据权利要求1至6任一项所述的基于RabbitMQ的消息发送方法,其特征在于,
所述队列标识为所述生产端根据所述消息的消息类型、所述消费端的消息处理类型以及与所述消费端相绑定的消息队列设置的队列标识。
8.一种基于RabbitMQ的消息发送装置,其特征在于,包括:
接收模块,用于接收生产端发送的消息和队列标识;所述队列标识用于识别出投递该消息的相应消息队列;
确定模块,用于从预先声明的多个消息队列中确定与所述队列标识相对应的消息队列;
发送模块,用于将所述消息发送给与所述消息队列相绑定的消费端;其中,所述消息队列用于接收到所述消息后,将所述消息发送至所述相绑定的消费端;各个所述消息队列分别绑定一个消费端。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述的基于RabbitMQ的消息发送方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的基于RabbitMQ的消息发送方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910019563.8A CN109885410B (zh) | 2019-01-09 | 2019-01-09 | 消息发送方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910019563.8A CN109885410B (zh) | 2019-01-09 | 2019-01-09 | 消息发送方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109885410A CN109885410A (zh) | 2019-06-14 |
CN109885410B true CN109885410B (zh) | 2021-04-13 |
Family
ID=66925712
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910019563.8A Active CN109885410B (zh) | 2019-01-09 | 2019-01-09 | 消息发送方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109885410B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110297722B (zh) * | 2019-06-28 | 2021-08-24 | Oppo广东移动通信有限公司 | 线程任务通信方法及相关产品 |
CN110351355B (zh) * | 2019-07-04 | 2022-02-25 | 苏宁云计算有限公司 | 消息处理系统 |
CN110661849A (zh) * | 2019-08-30 | 2020-01-07 | 中国人民财产保险股份有限公司 | 一种请求处理方法、装置、电子设备及存储介质 |
CN110647416B (zh) * | 2019-08-30 | 2023-03-24 | 福建天泉教育科技有限公司 | 一种消息队列跟踪记录方法及系统 |
CN110740102B (zh) * | 2019-09-29 | 2021-10-15 | 苏州浪潮智能科技有限公司 | 一种通信方法、系统、设备及计算机可读存储介质 |
CN110688284A (zh) * | 2019-09-29 | 2020-01-14 | 武汉易酒批电子商务有限公司 | 一种管理和监控RabbitMq消息队列的方法及系统 |
US11269686B2 (en) | 2019-11-25 | 2022-03-08 | Red Hat, Inc. | Adaptive consumer thread pool |
CN111013133A (zh) * | 2019-11-29 | 2020-04-17 | 北京奇艺世纪科技有限公司 | 数据处理方法及装置 |
CN111314422A (zh) * | 2020-01-17 | 2020-06-19 | 平安医疗健康管理股份有限公司 | 基于kafka的消息处理方法、系统、存储介质及计算机设备 |
US11018965B1 (en) | 2020-01-24 | 2021-05-25 | Red Hat, Inc. | Serverless function scaling |
CN112131308A (zh) * | 2020-08-03 | 2020-12-25 | 深圳市麦谷科技有限公司 | 基于RabbitMq分布式非阻塞微信模板方法及装置 |
CN112445631A (zh) * | 2020-12-02 | 2021-03-05 | 广东博智林机器人有限公司 | Rtps的进程通信方法、装置、电子设备及存储介质 |
CN112637046A (zh) * | 2020-12-18 | 2021-04-09 | 北京房天下嘉居网络技术有限公司 | 消息推送方法及路由装置 |
CN112714187B (zh) * | 2020-12-31 | 2023-03-24 | 平安银行股份有限公司 | 消息推送的管控方法、电子装置、计算机设备及存储介质 |
CN112839038A (zh) * | 2021-01-04 | 2021-05-25 | 城云科技(中国)有限公司 | 服务器之间单向通信传输数据的方法及系统 |
CN113296976A (zh) * | 2021-02-10 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 消息处理方法、装置、电子设备、存储介质及程序产品 |
CN113301009B (zh) * | 2021-02-23 | 2023-06-23 | 阿里巴巴集团控股有限公司 | 一种顺序消息的处理方法及装置 |
CN114253747B (zh) * | 2021-12-27 | 2023-04-28 | 北京宇信科技集团股份有限公司 | 一种分布式消息管理系统和方法 |
CN114726809B (zh) * | 2022-06-10 | 2022-09-20 | 北京沃丰时代数据科技有限公司 | 多租户路由方法、装置、设备、存储介质及程序产品 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6065045A (en) * | 1997-07-03 | 2000-05-16 | Tandem Computers Incorporated | Method and apparatus for object reference processing |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060048162A1 (en) * | 2004-08-26 | 2006-03-02 | Bull Hn Information Systems Inc. | Method for implementing a multiprocessor message queue without use of mutex gate objects |
US20120151488A1 (en) * | 2010-12-10 | 2012-06-14 | International Business Machines Corporation | Measuring Transaction Performance Across Application Asynchronous Flows |
CN102694847B (zh) * | 2012-05-03 | 2014-10-22 | 北京新媒传信科技有限公司 | 抓取第三方开放平台中用户动态的方法和装置 |
CN103761141A (zh) * | 2013-12-13 | 2014-04-30 | 北京奇虎科技有限公司 | 一种实现消息队列的方法及装置 |
CN105610926B (zh) * | 2015-12-22 | 2019-01-11 | 广州品唯软件有限公司 | 消息传递方法、系统和消息中间件系统 |
CN107025142A (zh) * | 2016-01-29 | 2017-08-08 | 华为技术有限公司 | 一种线程间消息传递方法、装置及电子设备 |
CN106250249A (zh) * | 2016-08-09 | 2016-12-21 | 广州唯品会信息科技有限公司 | 消息队列的控制方法及装置 |
CN106445705B (zh) * | 2016-10-08 | 2020-06-02 | 武汉烽火众智数字技术有限责任公司 | 基于RabbitMQ和Socket.io的平台级联方法和系统 |
-
2019
- 2019-01-09 CN CN201910019563.8A patent/CN109885410B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6065045A (en) * | 1997-07-03 | 2000-05-16 | Tandem Computers Incorporated | Method and apparatus for object reference processing |
Also Published As
Publication number | Publication date |
---|---|
CN109885410A (zh) | 2019-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109885410B (zh) | 消息发送方法、装置、计算机设备和存储介质 | |
CN108833521B (zh) | 消息推送方法、装置、系统、计算机设备和存储介质 | |
CN109949111B (zh) | 电子票据标识分配方法、电子票据生成方法、装置及系统 | |
CN111625593B (zh) | 基于区块链的数据处理方法、装置、计算机设备 | |
CN111522641B (zh) | 任务调度方法、装置、计算机设备和存储介质 | |
US8930316B2 (en) | System and method for providing partition persistent state consistency in a distributed data grid | |
CN112965818B (zh) | 一种服务集群单元化分组方法、装置、设备以及介质 | |
WO2019100598A1 (zh) | 交易处理方法、装置、计算机设备及存储介质 | |
CN110708247B (zh) | 消息路由方法、装置、计算机设备和存储介质 | |
CN112118315A (zh) | 数据处理系统、方法、装置、电子设备和存储介质 | |
CN110557416B (zh) | 一种多节点协同打块的方法及系统 | |
US20210397483A1 (en) | Evaluation device, evaluation method and evaluation program | |
CN111447143A (zh) | 业务服务数据传输方法、装置、计算机设备和存储介质 | |
CN110071968B (zh) | 一种基于区块链的消息存储方法及装置 | |
CN105933271B (zh) | 一种基于加密机的数据处理方法及装置 | |
CN108376154B (zh) | 系统基表同步方法、装置、计算机设备和存储介质 | |
CN112636987B (zh) | 一种区块链的跨链网关确定方法、系统及终端设备 | |
CN108111630B (zh) | 一种Zookeeper集群系统及其连接方法和系统 | |
CN114610504A (zh) | 消息处理方法、装置、电子设备及存储介质 | |
CN105049463A (zh) | 分散数据库、数据共享方法、用于分散数据库的装置 | |
CN112492019B (zh) | 消息推送方法、装置、电子设备及存储介质 | |
CN112738264B (zh) | 消息中间件消息传输方法、装置、计算机设备和存储介质 | |
CN114598662A (zh) | 消息队列集群联邦管理系统以及方法 | |
CN113076380A (zh) | 数据同步方法、装置、系统、设备及存储介质 | |
CN113660353A (zh) | 基于蓝牙Mesh的Provisioner地址管理的方法、装置、设备和介质 |
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 |