我有以下AMQ使用者配置文件,它试图从队列中使用“持久”消息。此外,消息是“事务处理”(因为如果无法以预期的方式处理消息,我需要回滚)。
我发现此配置存在问题: 每当消费者在消费消息后调用session.commit()时,我都会看到提交调用需要大约8秒钟才会出现。我相信这不是预期的。
如果我对以下配置有任何问题,有人可以指点我吗?
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>
<bean id="simpleMessageListener" class="listener.StompSpringListener" scope="prototype" />
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<property name="physicalName" value="JOBS.notifications"/>
</bean>
<bean id="poolMessageListener" class="org.springframework.aop.target.CommonsPoolTargetSource">
<property name="targetBeanName" value="simpleMessageListener"/>
<property name="maxSize" value="200"/>
</bean>
<bean id="messageListenerBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="poolMessageListener"/>
</bean>
<jms:listener-container
container-type="default"
connection-factory="amqConnectionFactory"
acknowledge="transacted"
concurrency="200-200"
cache="consumer"
prefetch="10">
<jms:listener destination="JOBS.notifications" ref="messageListenerBean" method="onMessage"/>
</jms:listener-container>
答案 0 :(得分:0)
查看ActiveMQ Spring support页面。我立即看到的是您应该使用PoolingConnectionFactory
而不是ActiveMQConnectionFactory
。这将确保从代码中仅为代理设置单个TCP连接,并将在轮询线程之间共享。