RabbitMQ与spring结合并发设置简介
rabbitMQ与spring结合起来,在目前应用还是比较广泛的,在spring的配置文件中:
我们所应用的场景为2个JVM服务做得集群环境,同时监听5个消息队列queue1-queue5,消费者监听可分为配置文件配置监听,也可以通过spring注解的方式配置监听,具体如何监听不在本文描述。
我们所用的模式是生产者消费者的模式,针对并发情况,我们做了如下问题验证:
1.两个jvm同时监听一个队列时,是否会有重复获取队列的现象?
经过测试,没有发现同一个消息被两个消费者获取并处理的现象,说明rabbitMQ对生产者消费者模式中,并发处理的还是可以的
2.同一个jvm起不同的线程,是否会有重复获取队列的现象?
经过测试,也没有发现获取相同的消息(场景雷同问题1,此处仅做简单验证)
3.同一个jvm配置concurrenctConsumers参数和maxConcurrentConsumers参数,分别作用是什么?
经过测试,concurrenctConsumers参数主要是系统启动时,线程初始的并发数量
maxConcurrenctConsumers参数主要是系统最大的并发数量
当concurrenctConsumers < maxConcurrenctConsumers时,当this.lastConsumerStarted + this.startConsumerMinInterval < now时,可以新增一个线程来取消息,spring默认的this.startConsumerMinInterval=10000ms。
反之,this.lastConsumerStopped + this.stopConsumerMinInterval < now,则减去一个线程,this.stopConsumerMinInterval默认值为60000ms
除非concurrenctConsumers 和 maxConcurrenctConsumers都为1,否则队列都是并行执行的。