ActiveMQ DefaultMessageListenerContainer Почему только одно соединение? - PullRequest
0 голосов
/ 26 декабря 2018
<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 с инициализацией , и постепенно увеличивается с изменением.

1 Ответ

0 голосов
/ 02 января 2019

Нижняя строка относительно количества соединений, которые будут использоваться, определяется org.springframework.jms.listener.DefaultMessageListenerContainer, который вы настроили (поскольку это единственный компонент, который фактически создает соединения).Насколько я могу судить, он только когда-либо создаст одиночное соединение, поэтому использование пула соединений здесь представляется бессмысленным.Параметр concurrency просто управляет одновременным числом потребителей в соединении.

Установив maxConnections = 10 в org.apache.activemq.pool.PooledConnectionFactory, вы просто ограничиваете размер пула соединений,Однако, поскольку queueListenerContainer никогда не будет вызывать createConnection() более одного раза, это на самом деле не имеет значения.

Вы можете прочитать о maxThreadPoolSize из org.apache.activemq.ActiveMQConnectionFactory в ActiveMQдокументация .

...