activeMQ在处理大量并发消息出现的问题

来源:互联网 发布:2017淘宝店铺扣分规则 编辑:程序博客网 时间:2024/05/16 05:27
我在系统中使用activemq处理客户发入的手机短信,运行一段时间后发现了问题,在发送到queue的消息并发较多时,消费端只能接收一部分,比如100条消息在较短的时间内发入,总有10来条接收不到,存放在服务器上,而且这些消息一直不能主动发送出来,后面继续进入的消息都能正常处理,最终只有重新启动服务消费端才能接收到那部分剩下的消息。
  1、考虑到是否是同步异步接收的关系,调整了连接参数,发现异步效果稍微好点,但还是有同样问题。
  2、考虑是否事务能有影响,加入JTA事务,发现加与不加事务效果相同。
问题:
  activemq的queue中,如果消费端消息处理能力不够,积累的消息存在服务端,那服务端是否会自动尝试再次发送呢,能否设置呢?

下面是我的配置
Java代码 复制代码 收藏代码
  1. <amq:broker useJmx="false" persistent="true">   
  2.     <amq:persistenceAdapter>   
  3.         <amq:amqPersistenceAdapter directory="activemq-data" maxFileLength="32mb"/>   
  4.     </amq:persistenceAdapter>   
  5.     <amq:transportConnectors>   
  6.         <amq:transportConnector uri="stomp://localhost:61613"/>   
  7.         <amq:transportConnector uri="tcp://localhost:61616"/>   
  8.     </amq:transportConnectors>   
  9. </amq:broker>   
  10.   
  11. <bean id="jmsConnectionFactory"  
  12.     class="org.jencks.pool.PooledSpringXAConnectionFactory" autowire="byType">   
  13.     <property name="connectionFactory">   
  14.         <bean class="org.apache.activemq.ActiveMQXAConnectionFactory">   
  15.             <property name="brokerURL">   
  16.                 <value>vm://localhost</value>  
  17.             </property>   
  18.         </bean>   
  19.     </property>   
  20. </bean>  

 

下面是消费端配置

Java代码 复制代码 收藏代码
  1. <amq:queue name="smsScanADestination" physicalName="CORAL.JMS.SMSROUTER.A"/>   
  2.     <bean id="smsScanAListenerContainer"  
  3.         class="org.springframework.jms.listener.DefaultMessageListenerContainer">   
  4.         <property name="connectionFactory" ref="jmsConnectionFactory" />   
  5.         <property name="destination" ref="smsScanADestination" />   
  6.         <property name="messageListener" ref="smsAListener" />   
  7.     </bean>   
  8.     <!--  Message Driven POJO (MDP) -->   
  9.     <bean id="smsAListener"  
  10.         class="org.springframework.jms.listener.adapter.MessageListenerAdapter">   
  11.         <constructor-arg>   
  12.             <ref bean="smsAListenerService" />   
  13.         </constructor-arg>   
  14.         <property name="defaultListenerMethod" value="handleMessage"/>   
  15.     </bean>   
  16.     <bean id="smsAListenerService"  
  17.         class="cn.org.coral.biz.sms.service.SmsAListenerService"/>