<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${mq.activemq.host}" />
<property name="userName" value="${mq.activemq.user}" />
<property name="password" value="${mq.activemq.pass}" />
<property name="maxThreadPoolSize" value="30" />
</bean>
<bean id="amqPooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory" ref="amqConnectionFactory" />
<property name="maxConnections" value="10" />
<property name="maximumActiveSessionPerConnection" value="300" />
<property name="idleTimeout" value="60000" />
</bean>
<bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="amqPooledConnectionFactory" />
<property name="destination" ref="queueDestination" />
<property name="messageListener" ref="queueAwareMessageListener" />
<property name="taskExecutor" ref="queueListenerTaskExecutor" />
<property name="concurrency" value="5-30" />
</bean>
maxThreadPoolSize
,maxConnections
,maximumActiveSessionPerConnection
和concurrency
之间是什么关系?
为什么我将maxConnections
设置为10,但是侦听器在连接中仅一个连接器,不能增加更多?
消费者人数是正确的。初始化时有5个,随着变化逐渐增加。
答案 0 :(得分:0)
关于将要使用的连接数的底线由您配置的org.springframework.jms.listener.DefaultMessageListenerContainer
决定(因为这是此处实际创建连接的唯一组件)。据我所知,它只会创建一个单个连接,因此在这里使用连接池显得毫无意义。 concurrency
参数仅控制连接上
通过在maxConnections
上设置org.apache.activemq.pool.PooledConnectionFactory
= 10,您只是在限制连接池的大小。但是,由于queueListenerContainer
永远不会调用createConnection()
一次以上,所以这并不重要。
您可以在the ActiveMQ documentation中了解maxThreadPoolSize
中的org.apache.activemq.ActiveMQConnectionFactory
。