关于spring+activemq的问题

发布于 2021-11-15 15:19:41 字数 1944 浏览 758 评论 1

环境:spring+activemq

错误:在spring配置文件中配置了两个不同container,两个container使用同一个自定义listener。

启动服务后的现象是:每隔5秒钟,控制台打印出:

[INFO ] [2012-12-13 15:59:09] [FailoverTransport:doReconnect:878] Successfully connected to tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=10000

进行一次重连。


换用不同的listener就不出现了。

两个container配置

<bean id="TopicContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="topicListenConnectionFactory"/>
        <property name="destination" ref="Topic"/>
        <property name="messageListener" ref="actMessageListener"/>
        <!-- JMS Selector消息过滤器 -->
        <!--<property name="messageSelector" value="objectType='user'"/>-->
        <!-- 持久化订阅者 -->
        <property name="subscriptionDurable" value="true"/>
        <property name="autoStartup" value="true"/>
    </bean>
 <!-- 异步接收Topic消息Container -->
    <bean id="entityUpdateTopicContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="topicListenConnectionFactory"/>
        <property name="destination" ref="cacheTopic"/>
        <property name="messageListener" ref="actMessageListener"/>
        <!-- JMS Selector消息过滤器 -->
        <!--<property name="messageSelector" value="objectType='user'"/>-->
        <!-- 持久化订阅者 -->
        <property name="subscriptionDurable" value="true"/>
    </bean>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不再见 2021-11-17 13:49:32

好吧,自己找到答案了。

public void setMessageListener(Object messageListener) {
		checkMessageListener(messageListener);
		this.messageListener = messageListener;
		if (this.durableSubscriptionName == null) {
			this.durableSubscriptionName = getDefaultSubscriptionName(messageListener);
		}
	}

因为没有设置durableSubscriptionName,都设置为了listener类的名字,导致

String clientId = context.getClientId();
            String subscriptionName = info.getSubscriptionName();
            SubscriptionKey key = new SubscriptionKey(clientId, subscriptionName);
            DurableTopicSubscription sub = durableSubscriptions.get(key);
            if (sub != null) {
                if (sub.isActive()) {
                    throw new JMSException("Durable consumer is in use for client: " + clientId + " and subscriptionName: " + subscriptionName);
                }

注册消费者时候出错了

报错为:

javax.jms.JMSException: Durable consumer is in use for client: TEST-Windows 7-wayne-2.11.100-20121213-1639 
and subscriptionName: com.wayne.act.message.ActMessageListener

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文