FailoverTransport多次实例化

时间:2012-10-27 22:03:10

标签: spring jms websphere activemq spring-jms

我正在使用spring-jms版本3.0.5和activeMQ版本4.5.2。当部署到Tomcat时,一切似乎都能正常工作。当部署到WebSphere时,似乎有四个单独的故障转移传输正在被实例化,而我的MessageListener实现对于发布到我的主题的每条消息都会收到相同的消息四次。

这是我的配置:

<bean id="activeMQConnectionFactory"
      class="org.apache.activemq.ActiveMQConnectionFactory">
       <property name="brokerURL" value="failover://(tcp://server.com:12345,tcp://server2.com:12345)?randomize=false/>
</bean>

<bean id="topic" class="org.apache.activemq.command.ActiveMQTopic">
    <constructor-arg value="TOPIC.ONE" />
</bean>

<bean id="jmsTemplate" class="org.sprinframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestination" ref="topic" />
</bean>

<bean name="topicListener" class="com.foo.TopicListener" />

<jms:listener-container connection-factory="connectionFactory" cache="auto" destination-type="topic">
    <jms:listener destination="topic" ref="topicListener" />
</jms:listener-container>

这是我的留言听众:

import javax.jms.MessageListener;
import org.springframework.stereotype.Component;

@Component
public class TopicListener implements MessageListener {

    public void onMessage(Message msg) {
        log(msg);
    }

}

这就是我在日志中看到的内容(仅限WebSphere)

11:59:59,764 () INFO (Thread-50) (DefaultLifecycleProcessor) Starting beans in phase 214783647
12:00:00,140 () INFO (ActiveMQ Task) (FailoverTransport) Successfully connected to tcp://server.com:12345
12:00:00,253 () INFO (ActiveMQ Task) (FailoverTransport) Successfully connected to tcp://server.com:12345
12:00:00,342 () INFO (ActiveMQ Task) (FailoverTransport) Successfully connected to tcp://server.com:12345
12:00:00,423 () INFO (ActiveMQ Task) (FailoverTransport) Successfully connected to tcp://server.com:12345
12:00:00,492 () INFO (Thread-50) (ContextLoader) Root WebApplicationContext: initialization completed in 100239 ms

然后,一旦我发表主题,我就会看到:

12:01:00,250 () INFO (org.springframework.jms.listener.DefaultMessageListenerContainer#0-1) (TopicListener) logging message
12:01:00,251 () INFO (org.springframework.jms.listener.DefaultMessageListenerContainer#3-1) (TopicListener) logging message
12:01:00,251 () INFO (org.springframework.jms.listener.DefaultMessageListenerContainer#2-1) (TopicListener) logging message
12:01:00,275 () INFO (org.springframework.jms.listener.DefaultMessageListenerContainer#1-1) (TopicListener) logging message

我已经看到一些迹象表明,如果我设置concurrentConsumers > 1,可能会出现这种行为,但据我所知,我没有。我怎样才能确保我只收到一次这些消息?

更新:

启用调试日志记录后,我也看到了:

2012-10-28 12:00:00,000 () DEBUG (Thread-50) (DefaultLifecycleProcessor) Starting bean 'org.springframework.jms.listener.DefaultMessageListenerContainer#0' of type [class org.springframework.jms.listener.DefaultMessageListenerContainer]
2012-10-28 12:00:00,011 () DEBUG (Thread-50) (DefaultLifecycleProcessor) Starting bean 'org.springframework.jms.listener.DefaultMessageListenerContainer#1' of type [class org.springframework.jms.listener.DefaultMessageListenerContainer]
2012-10-28 12:00:00,021 () DEBUG (Thread-50) (DefaultLifecycleProcessor) Starting bean 'org.springframework.jms.listener.DefaultMessageListenerContainer#2' of type [class org.springframework.jms.listener.DefaultMessageListenerContainer]
2012-10-28 12:00:00,029 () DEBUG (Thread-50) (DefaultLifecycleProcessor) Starting bean 'org.springframework.jms.listener.DefaultMessageListenerContainer#3' of type [class org.springframework.jms.listener.DefaultMessageListenerContainer]

为什么Spring会创建其中四个bean?

0 个答案:

没有答案
相关问题