开发者社区> 问答> 正文

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

使用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>

展开
收起
a123456678 2016-03-18 15:45:03 5469 0
1 条回答
写回答
取消 提交回答
  • 需要配置topic的监听线程concurrency为1,要不然会出现一个程序建立了多个客户端连接,处理多次的,queue就可以配置多一点,多线程处理。

    2019-07-17 19:06:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Rocket MQ 使用排查指南 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载