我有一个用例,我想在应用程序中创建多个侦听器(6)。我想订阅多个目的地(6个主题)。 所有订阅都是持久的。我为每个监听器使用单独的默认消息监听器容器(DMLC)并使用不同的客户端ID,但我对如何使用连接工厂感到困惑。
我是否应该使用指定为maxConnection的单个ActiveMQ池连接工厂。或者我应该为每个侦听器使用不同的池连接工厂吗?
对于持久订户,使用pooledConnectionFactory和maxConnection有什么危害吗?
源代码:
连接工厂:
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>${jms.broker.url}</value>
</property>
</bean>
</property>
<property name="maxConnections" value="6" />
我的监听器正在使用它:(我有6个类似的侦听器使用不同的目标和客户端ID)
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer"
<property name="connectionFactory" ref="jmsFactory" />
<property name="destination" ref="topic_pnlCompleteTopic" />
<property name="durableSubscriptionName" value="FAGCompletion" />
<property name="pubSubDomain" value="true" />
<property name="subscriptionDurable" value="${jms.fagsListener.durable}" />
<property name="clientId" value="${jms.fagsListener.clientId}" />
<property name="messageListener" ref="pnlMessageListener" />
<property name="messageSelector" value="JMSType = 'FAG Completion'" />
</bean>
答案 0 :(得分:1)
只要你没有使用这个连接工厂做其他事情,那对我来说听起来都很好。没有理由将连接数限制为6,如果需要,可以设置更高的数字,只有在必要时才使用。 ConnectionFactory
通常是您为整个应用分享的内容。将其视为JMS访问的DataSource
答案 1 :(得分:1)
由于您使用的是主题,因此您只能使用一个会话。没有理由指定池的限制或使用多个池。您通常会为应用程序使用一个池化连接工厂,除非您看到将其限制或拆分为不同池的真正原因。