activemq_product_写给自己看的

pom.xml
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-core</artifactId>
    <version>5.7.0</version>
</dependency>
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>5.13.3</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>${spring.version}</version>
</dependency>

config.properties
mq.brokerURL=failover:(tcp://ip61616)
mq.userName=xxxuserNamexxx
mq.password=xxxpasswordxxx
mq.pool.maxConnections=20
biz.queueName=biz

spring-product-activemq.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-4.2.xsd">

	<context:component-scan base-package="com.qbsea.modules.activemqproduct" />
	<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
	<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<!-- ActiveMQ服务地址 -->
		<property name="brokerURL" value="${mq.brokerURL}" />
		<property name="userName" value="${mq.userName}"></property>
		<property name="password" value="${mq.password}"></property>
		<property name="useAsyncSend" value="true" />
	</bean>
	
	<!--
        ActiveMQ为我们提供了一个PooledConnectionFactory,通过往里面注入一个ActiveMQConnectionFactory
        可以用来将Connection、Session和MessageProducer池化,这样可以大大的减少我们的资源消耗。
        要依赖于 activemq-pool包
     -->
	<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
		<property name="connectionFactory" ref="targetConnectionFactory"/>
		<property name="maxConnections" value="${mq.pool.maxConnections}"/>
	</bean>

	<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
	<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
		<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
		<property name="targetConnectionFactory" ref="pooledConnectionFactory"/>
		<property name="reconnectOnException" value="true"/>
	</bean>

	<!-- 队列目的地-->
	<bean id="bizQueue" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg index="0" value="${biz.queueName}"/>
	</bean>
	
	<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
	<!-- 队列模板 这里配置2个,一个用于分布式业务,一个用于发送邮件-->
	<bean id="bizMqJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
		<property name="connectionFactory" ref="connectionFactory"/>
		<property name="defaultDestination" ref="bizQueue"/>
		<!-- 使 deliveryMode, priority, timeToLive设置生效-->
		<property name="explicitQosEnabled" value="true" />
		<!-- 持久化 如果设置为非持久化MQ服务器重启后MQ中的数据会丢失-->
		<property name="deliveryPersistent" value="true"/>
		<!--这里注意:如果不开启事务,消息在异常的情况下是不会重试的-->
		<property name="sessionTransacted" value="false"/>
		<!--消息发送的优先级,从0-9,越大越优先,默认为4-->
		<property name="priority" value="3"/>
	</bean>
</beans>

java端生产者的代码

package com.qbsea.modules.activemqproduct;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
@Component(value="mQProducer")
public class MQProducer {
    private final Logger log = LoggerFactory.getLogger(MQProducer.class);

    @Autowired
    private JmsTemplate bizMqJmsTemplate;
    public void sendBizMessage(final long goodsid) {
        final long start = System.currentTimeMillis();
        bizMqJmsTemplate.send(new MessageCreator() {
			@Override
			public Message createMessage(Session session) throws JMSException {
				long end = System.currentTimeMillis();
				log.info("createMessage use time" + (end - start) + "ms");
				return session.createTextMessage(goodsid+"");
			}
        });
        long end = System.currentTimeMillis();
		log.info("sendBizMessage use time" + (end - start) + "ms");
    }
}

猜你喜欢

转载自blog.csdn.net/maqingbin8888/article/details/81359725