activemq发送topic消息,接收了两次

发布于 2021-12-02 23:32:09 字数 3379 浏览 716 评论 11

使用spring + activemq 框架,发送topic消息,在接收端接收了两次消息,但使用queue却不会出现这种情况。

xml配置如下

<!-- 配置connectionFactory -->
    <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>tcp://127.0.0.1:61616</value>
                </property>
            </bean>
        </property>
        <property name="maxConnections" value="100"></property>
    </bean>

    <!-- 发送消息的目的地(一个队列) -->
    <bean id="destQueue" class="org.apache.activemq.command.ActiveMQQueue">
        <!-- 设置消息队列的名字 -->
        <constructor-arg index="0" value="queue" />
    </bean>
    <bean id="messageConverter" class="com.andeveloper.springdemo.mq.ActiveMQMessageConverter" />
    
    
    <!-- Spring JMS Template -->
    <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <ref local="jmsFactory" />
        </property>
        <property name="defaultDestination" ref="destQueue" />
        <!-- 区别它采用的模式为false是p2p为true是订阅 -->
        <property name="pubSubDomain" value="false" />
        <property name="messageConverter" ref="messageConverter"></property>
    </bean>
    
    <!-- 发送消息的目的地(一个主题) -->
    <bean id="destTopic" class="org.apache.activemq.command.ActiveMQTopic">
        <!-- 设置消息队列的名字 -->
        <constructor-arg index="0" value="topic" />
    </bean>
    <!-- Spring JMS Template -->
    <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <ref local="jmsFactory" />
        </property>
        <property name="defaultDestination" ref="destTopic" />
        <!-- 区别它采用的模式为false是p2p为true是订阅 -->
        <property name="pubSubDomain" value="true" />
        <property name="messageConverter" ref="messageConverter"></property>
    </bean>
    
    <bean id="messageQueueListener" class="com.andeveloper.springdemo.mq.ActiveMQMessageQueueListener" />
    
    <bean id="messageQueueContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="jmsFactory"></property>
		<property name="destination" ref="destQueue"></property>
		<property name="messageListener" ref="messageQueueListener"></property>
    </bean>
    
    <bean id="messageTopicListener1" class="com.andeveloper.springdemo.mq.ActiveMQMessageTopicListener1" />
   	<bean id="messageTopicContainer1" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="jmsFactory"></property>
		<property name="destination" ref="destTopic"></property>
		<property name="messageListener" ref="messageTopicListener1"></property>
    </bean>

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

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

发布评论

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

评论(11

浅沫记忆 2021-12-08 15:54:11

<property name="pubSubNoLocal" value="true"></property> 把 DefaultMessageListenerContainer 的 这个属性 设置为true 它的默认值 在 AbstractMessageListenerContainer 里 设置的是 false 

绝情姑娘 2021-12-08 15:54:07

请问你解决了吗?我也遇到这个问题

筱武穆 2021-12-08 15:54:05

回复 找到解决方案了吗?

笑红尘 2021-12-08 15:50:50

您好,请问最后怎么解决的,我也遇到了以上问题,总是有两个消费者

百思不得你姐 2021-12-08 15:43:12

好,我试一下

泛泛之交 2021-12-08 15:38:53

您好,我想问一下,在topic 中什么地方设置 topic的监听线程 ,没找到那个地方,求指点,谢谢、、、、

清晨说ぺ晚安 2021-12-08 15:30:15

回复
你是怎么配置的,用DefaultJmsListenerContainerFactory的话 有个 concurrency 属性 设置为1,如果用到了DefaultMessageListenerContainer 那么设置concurrentConsumers和maxConcurrentConsumers为1,建议看看jms里面的源码,这样对设置比较熟悉一点

勿忘初心 2021-12-08 14:24:55

需要配置topic的监听线程concurrency为1,要不然会出现一个程序建立了多个客户端连接,处理多次的,queue就可以配置多一点,多线程处理。

左岸枫 2021-12-08 05:27:56

服务器上不知道怎么看

终遇你 2021-12-07 17:23:16

回复
ActiveMQ-WebConsole 啊

一个人的旅程 2021-12-07 02:26:54

服务器上显示多少条?

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