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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
<property name="pubSubNoLocal" value="true"></property> 把 DefaultMessageListenerContainer 的 这个属性 设置为true 它的默认值 在 AbstractMessageListenerContainer 里 设置的是 false
请问你解决了吗?我也遇到这个问题
回复 找到解决方案了吗?
您好,请问最后怎么解决的,我也遇到了以上问题,总是有两个消费者
好,我试一下
您好,我想问一下,在topic 中什么地方设置 topic的监听线程 ,没找到那个地方,求指点,谢谢、、、、
回复
你是怎么配置的,用DefaultJmsListenerContainerFactory的话 有个 concurrency 属性 设置为1,如果用到了DefaultMessageListenerContainer 那么设置concurrentConsumers和maxConcurrentConsumers为1,建议看看jms里面的源码,这样对设置比较熟悉一点
需要配置topic的监听线程concurrency为1,要不然会出现一个程序建立了多个客户端连接,处理多次的,queue就可以配置多一点,多线程处理。
服务器上不知道怎么看
回复
ActiveMQ-WebConsole 啊
服务器上显示多少条?