ACTIVEMQ与spring集成后的性能问题

有需要用到activemq来发送和接收消息,我将它与spring集成来使用,预期发送消息20000条/s

实际上我发送20000条消息需要7秒左右,消费者更加慢只有1000条/S

我的配置如下:

	<bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="${jms.brokerURL}" />
		<property name="userName" value="${jms.username}" />
		<property name="password" value="${jms.password}" />
		<!-- 是否异步发送消息 -->
		<property name="useAsyncSend" value="true" />
		<property name="alwaysSessionAsync" value="false" />
	</bean>

	<!-- 设置发送连接池,提高性能 -->
	<bean id="JmsSenderFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
		destroy-method="stop">
		<property name="connectionFactory" ref="jmsFactory" />
		<property name="maxConnections" value="2"></property>
	</bean>

	<!-- 设置接收连接池,提高性能   -->
	<bean id="JmsReveiverFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
		<property name="connectionFactory" ref="jmsFactory" />
		<property name="maxConnections" value="10"></property>
	</bean>

	<!-- Spring JMS Template -->
	<bean id="jmsTemplate" class="cn.xx.xx.jms.core.EFSJmsTemplate">
		<property name="connectionFactory" ref="JmsSenderFactory" />
		<property name="defaultDestination" ref="destination" />
		<!-- 区别它采用的模式:false是p2p;true是订阅   -->
		<property name="pubSubDomain" value="false" />
		<!-- <property name="deliveryMode" value="1"></property>
		<property name="explicitQosEnabled" value="true"></property> -->
		<!-- 不使用事物 --> 
   		<property name="sessionTransacted" value="false" /> 
		<property name="messageConverter">
			<bean
				class="org.springframework.jms.support.converter.SimpleMessageConverter" />
		</property>

	</bean>

	<!-- Spring JMS Template -->
	<bean id="jmsTemplate2" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="JmsReveiverFactory" />
		<property name="defaultDestination" ref="destination" />
		<!-- 区别它采用的模式:false是p2p;true是订阅   -->
		<property name="pubSubDomain" value="false" />
		<property name="messageConverter">
			<bean
				class="org.springframework.jms.support.converter.SimpleMessageConverter" />
		</property>

	</bean>

	<!-- 发送消息的目的地(一个队列) -->
	<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
		<!-- 设置消息队列的名字 -->
		<constructor-arg index="0" value="${jms.queueName}" />
	</bean>


	<!-- 消息监听  -->
	<bean id="listenerContainer"
		class="org.springframework.jms.listener.DefaultMessageListenerContainer"
		lazy-init="false">
		<property name="concurrentConsumers" value="${jms.concurrentConsumers}" />
		<property name="connectionFactory" ref="JmsReveiverFactory" />
		<property name="destinationName" value="${jms.queueName}" />
		<property name="messageListener" ref="messageConsumer" />
		<property name="pubSubNoLocal" value="true"></property>
	</bean>


	<!-- 消息消费者 -->
	<bean id="messageConsumer" class="cn.xx.xx.jms.MessageConsumer">
		<property name="jmsTemplate2" ref="jmsTemplate2"></property>
	</bean>

	<!-- 消息生产 -->
	<bean id="messageProducer" class="cn.xx.xx.jms.MessageProducer">
		<property name="jmsTemplate" ref="jmsTemplate"></property>
	</bean>

avtivemq服务端配置我没改,直接重官网下载后就启动。

还有我发现单独写测试类发送消息不用spirng的jmsTemplate,生产者能达到我要求的速度,用spring的jmsTemplate的速度就很慢!

有遇到过这个问题的朋友吗?查资料试过好多方法了就是不行!

猜你喜欢

转载自advance-t.iteye.com/blog/2026553