8
回答
activemq和JmsTemplate整合,效率问题

我在activemq和JmsTemplate做整合时发现,生产者生产1万条消息要6-10秒,一个消费者消费的话,居然要5分钟。

如果不用JmsTemplate的话,速度很快。

我采用的是点对点的模式。



举报
h164222786
发帖于5年前 8回/3K+阅
共有8个答案 最后回答: 5年前
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd ">


  <!-- a pooling based JMS provider -->
  <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://localhost:61616?</value>
        </property>
        <property name="userName" value="system"/>
        <property name="password" value="manager"/>
      </bean>
    </property>
    <!-- 每个连接的最大活动会话,默认500 -->
    <property name="maximumActiveSessionPerConnection" value="500" />
    <!-- 空闲连接超时时间,单位:毫秒 -->
    <property name="idleTimeout" value="30000" />
    <!-- 如果连接池是满的,则阻塞 -->
    <property name="blockIfSessionPoolIsFull" value="true" />
    <!-- 最大连接数 -->
    <property name="maxConnections" value="100" />
  </bean>
 
  <!-- Spring JMS Template -->
  <bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
      <ref local="jmsFactory"/>
    </property>
    <!-- 非持久保存消息 -->
    <property name="deliveryMode" value="1" />
    <!-- 不使用事物 -->
    <property name="sessionTransacted" value="false" />
    <property name="messageIdEnabled" value="true" />
    <!-- 消息过期时间-单位:毫秒  24*60*60*1000 -->
    <property name="timeToLive" value="60000" />
    <!-- PTP时为false,pub时为true -->
    <property name="pubSubDomain" value="false" />
  </bean>
</beans>


附上我的配置文件

org.springframework.jms.connection.CachingConnectionFactory 用这个代替PooledConnectionFactory试试 具体属性可以查下文档

应该不是消费问题,你先把消费者的业务逻辑注释,先直接打印接收消息,看接收完1万个消息花费多少时间,会不会是你接收到消息后处理业务耗时
--- 共有 1 条评论 ---
h164222786我没写任何业务逻辑,就一个输出。 5年前 回复

看了你的配置,你不会是采用同步处理吧,

可以采用消息监听器处理消息

org.springframework.jms.listener.DefaultMessageListenerContainer

--- 共有 2 条评论 ---
wad12302回复 @h164222786 : 发消息和接收消息分开, 同步的意思,发送消息后要等到返回再发另一个消息,这样肯定慢 5年前 回复
h164222786你说的不要同步,是指,消息发送要异步还是消费要异步? 5年前 回复
顶部