spring +active mq 重复接收消息问题

梦想涨价了 2013-11-18 01:34:58
比如:第一次发送一条消息,内容为“1”,接收端会接收到一条消息,内容为“1”。第二次发送一条消息,内容为“2”,接收端会接收到2条消息,内容为“1,2”。这个是什么原因?找了好久没找问题的原因。可能是session的问题吗?
<!-- 配置connectionFactory -->  
<bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://192.168.61.125:61616</value>
</property>
</bean>

<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="connectionFactory" />
</property>
<property name="pubSubDomain" value="false" />
<property name="sessionAcknowledgeMode" value="2" />
</bean>
<!-- 发送消息-->
<bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0" value="com.topic" />
</bean>

<!-- 接收server消息 -->
<bean id="webTopicDestination"
class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0"
value="com.topic">
</constructor-arg>
</bean>

<!-- 接收消息监听的类 -->
<bean id="messageReceiver" class="com.mq.service.OnMessage">
</bean>
<!-- 消息监听 -->
<bean
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="1" />
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="webTopicDestination" />
<property name="messageListener" ref="messageReceiver" />
<property name="pubSubNoLocal" value="false"></property>
<property name="sessionTransacted" value="true" />
</bean>
...全文
888 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y__STORM 2015-04-08
  • 打赏
  • 举报
回复
楼主能不能把修改过的使用application的地方的代码贴出来看一下,谢谢了
梦想涨价了 2013-11-18
  • 打赏
  • 举报
回复
引用 3 楼 WLLX623 的回复:
你将发送的信息存到session,接收是从session中取?
一时没有注意,在测试MQ的时候,在java代码中加载发送消息的时候,先加载配置文件在获取到模板发送消息。在接收端监听去接收。导致每次发送消息时,都要重新加载配置。所以导致了重复。最后把获取application放在静态变量中,解决了重复问题,其实不是重复发送。写代码的时候没有理清楚导致滴,仔细看了下代码,发现问题,现在已经解决了。谢谢各位
梦想涨价了 2013-11-18
  • 打赏
  • 举报
回复
引用 2 楼 defonds 的回复:
禁用对相关的物理队列的转发消息,试试
<networkConnectors>
  <networkConnector uri="static://(tcp://localhost:61617)">
    <excludedDestinations>
  <queue physicalName="Consumer.*.VirtualTopic.>"/>
    </excludedDestinations>
  </networkConnector>
</networkConnectors>
一时没有注意,在测试MQ的时候,在java代码中加载发送消息的时候,先加载配置文件在获取到模板发送消息。在接收端监听去接收。导致每次发送消息时,都要重新加载配置。所以导致了重复。最后把获取application放在静态变量中,解决了重复问题,其实不是重复发送。写代码的时候没有理清楚导致滴,仔细看了下代码,发现问题,现在已经解决了。谢谢各位
梦想涨价了 2013-11-18
  • 打赏
  • 举报
回复
引用 1 楼 dyflovexlp 的回复:
看看你发送端的代码,和接收端的代码
一时没有注意,在测试MQ的时候,在java代码中加载发送消息的时候,先加载配置文件在获取到模板发送消息。在接收端监听去接收。导致每次发送消息时,都要重新加载配置。所以导致了重复。最后把获取application放在静态变量中,解决了重复问题,其实不是重复发送。写代码的时候没有理清楚导致滴,仔细看了下代码,发现问题,现在已经解决了。谢谢各位
翘班党 2013-11-18
  • 打赏
  • 举报
回复
你将发送的信息存到session,接收是从session中取?
Defonds 2013-11-18
  • 打赏
  • 举报
回复
禁用对相关的物理队列的转发消息,试试
<networkConnectors>
  <networkConnector uri="static://(tcp://localhost:61617)">
    <excludedDestinations>
  <queue physicalName="Consumer.*.VirtualTopic.>"/>
    </excludedDestinations>
  </networkConnector>
</networkConnectors>
dyflovexlp 2013-11-18
  • 打赏
  • 举报
回复
看看你发送端的代码,和接收端的代码

81,087

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧