本发明涉及计算机,尤其涉及一种rabbitmq队列水平扩展方法及系统。
背景技术:
1、在互联网架构中,消息中间件是一种常用的流量消峰,应用解耦和异步通讯的服务,消息中间件作为中间服务,使消息传输系统的上下游进行解耦,互不依赖。
2、rabbitmq是一个基于amqp(高级消息队列协议)的消息系统,是当前最主流的消息中间件之一。rabbitmq生产和发送消息均通过制定队列名称实现,当一个队列满足不了发送消息吞吐量的需求时,需要新增队列来实现消息的分流。然而,新增队列时,需要将队列名称同步通知生产者和消费者,生产者和消费者修改对应的生产和消费代码后才能实现消息分流。这种增加队列的方式增加了用户使用rabbitmq的复杂度,无法做到动态新增队列和使用户无感知。
3、目前rabbitmq的水平扩展主要是对服务节点的扩展,通过监控服务节点的阈值来实现动态新增服务节点,这种方式可以实现rabbitmq集群的性能扩展,但对于单个队列来讲,并不能提升单个队列的吞吐量或无法解决单个队列的消息堆积问题。对于rabbitmq队列的扩展,目前主要是使用shovel插件,将队列里的消息转移到另一个队列,这种方式可以适当提高队列的吞吐量,但该方式主要是解决队列消息堆积问题,不能从根本上解决队列高吞吐量需求的问题。
技术实现思路
1、为解决现有技术的不足,本发明提出一种rabbitmq队列水平扩展方法及系统,通过设计一种动态新增队列的方法,使类型为direct的交换器所关联的队列可以进行水平扩展,实现rabbitmq根据队列的消息积压动态新增队列,且使生产者和消费者使用时无感知。
2、为实现以上目的,本发明所采用的技术方案包括:
3、一种rabbitmq队列水平扩展方法,包括:
4、封装amqp协议,将amqp协议中的生产者和消费者进行封装;
5、所述生产者包括生产者软件开发工具包sdk接口,所述消费者包括消费者软件开发工具包sdk接口;
6、所述生产者生产消息,创建分片队列,设置消息堆积阈值,当第一消息队列的消息数量大于所述消息堆积阈值时,创建第二消息队列;
7、所述生产者调用生产者软件开发工具包sdk接口,获取所有消息队列,并发送消息;
8、所述消费者调用消费者软件开发工具包sdk接口,获取所有消息队列,并消费消息。
9、进一步地,所述生产者调用生产者软件开发工具包sdk接口,获取所有消息队列,并发送消息包括:
10、选择消息积压最小的消息队列发送消息;
11、或者设置第一定时轮询任务,定时轮询所述消息队列发送消息。
12、进一步地,所述消费者调用消费者软件开发工具包sdk接口,获取所有消息队列,并消费消息包括:
13、设置第二定时轮询任务,轮流监听所述消息队列;
14、或者使用线程池读取消息,将所述消息发布到对应的分片队列,所述消费者消费所述分片队列上的消息。
15、本发明还涉及一种rabbitmq队列水平扩展系统,包括:
16、封装模块,用于封装amqp协议,将amqp协议中的生产者和消费者进行封装;
17、生产模块,用于生产者生产消息,创建分片队列,设置消息堆积阈值,当第一消息队列的消息数量大于所述消息堆积阈值时,创建第二消息队列;
18、发送模块,用于生产者调用生产者软件开发工具包sdk接口,获取所有消息队列,并发送消息;
19、消费模块,用于消费者调用消费者软件开发工具包sdk接口,获取所有消息队列,并消费消息。
20、本发明还涉及一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法。
21、本发明还涉及一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器,用于执行存储器中存储的计算机程序,执行上述的方法。
22、本发明的有益效果为:
23、本发明通过设计一种动态新增队列的方法,使类型为direct的交换器所关联的队列可以进行水平扩展,实现rabbitmq根据队列的消息积压动态新增队列,且使生产者和消费者使用时无感知,同时提高了生产者吞吐量。
1.一种rabbitmq队列水平扩展方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述生产者调用生产者软件开发工具包sdk接口,获取所有消息队列,并发送消息包括:
3.如权利要求2所述的方法,其特征在于,所述消费者调用消费者软件开发工具包sdk接口,获取所有消息队列,并消费消息包括:
4.一种rabbitmq队列水平扩展系统,其特征在于,包括:
5.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至3中任一项所述的方法。
6.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器,用于执行存储器中存储的计算机程序,执行权利要求1至3中任一项所述的方法。