ActiveMQ开发配置与用例
博客专区 > longload 的博客 > 博客详情
ActiveMQ开发配置与用例
longload 发表于1年前
ActiveMQ开发配置与用例
  • 发表于 1年前
  • 阅读 255
  • 收藏 3
  • 点赞 1
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 本文主要描写开发配置与简单的用例,其他基础配置请看前面. 可以使用ActiveMQ的管理页面进行查看队列的情况!
  1. 依赖的jar 

    maven的依赖

    <dependency>
    	<groupId>org.apache.activemq</groupId>
    	<artifactId>activemq-all</artifactId>
    	<version>5.14.0</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.activemq</groupId>
    	<artifactId>activemq-pool</artifactId>
    	<version>5.14.0</version>
    </dependency>
    <!--spring -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-jms</artifactId>
    	<version>4.2.3.RELEASE</version>
    </dependency>
  2. 生产者的XML配置文件 

    <!-- 真正可以产生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> 
    	</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" />
    	</bean>
    	
    	<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
    	
    	<!-- 队列模板 ,对JMS协议的实现-->
    	<bean id="activeMqJmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
    	    <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->  
    	    <property name="connectionFactory" ref="connectionFactory"/>  
    	    <property name="defaultDestinationName" value="${queueName}"></property>
    	</bean> 
  3. 生产者的简单用例

    import javax.annotation.Resource;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    import org.springframework.stereotype.Service;
    
    import longload.edu.demo.modal.Mail;
    
    @Service("producer")
    public class Producer {
    	@Resource
    	private JmsTemplate jmsTemplate;
    	/**
    	 * 发送消息
    	 * @param mail
    	 */
    	public void sendMessage(final Mail mail){
    		jmsTemplate.send(new MessageCreator() {
    			@Override
    			public Message createMessage(Session session) throws JMSException {
    				/**
    				 * 创建一个消息,常用的有createObjectMessage与createTextMessage
    				 */
    				return session.createObjectMessage(mail);
    			}
    		});
    	}
    }
  4. 消费者XML配置

    在生产者的XML配置文件 的基础上增加下面内容

    <!--这个是sessionAwareQueue目的地 -->
    	<bean id="sessionAwareQueue" class="org.apache.activemq.command.ActiveMQQueue">
    		<constructor-arg>
    			<value>${queueName}</value>
    		</constructor-arg>
    	</bean>
    	<!-- 可以获取session的MessageListener,需要实现SessionAwareMessageListener类 -->
    	<bean id="consumerSessionMessageListener" class="longload.edu.demo.listener.ConsumerSessionMessageLister"></bean>
    
    	<bean id="sessionAwareListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    		<property name="connectionFactory" ref="connectionFactory" />
    		<!-- 监听的队列 -->
    		<property name="destination" ref="sessionAwareQueue" />
    		<!-- 指定接收消息的消息监听-->
    		<property name="messageListener" ref="consumerSessionMessageListener" /> 
    	</bean>

     如果需要使用下面来接收一个已序列化的对象(createTextMessage不需要)

    ActiveMQObjectMessage msg = (ActiveMQObjectMessage) message;

     需要增加一个可信任的包路径或者信任所有,需要对targetConnectionFactory增加一个trustAllPackages或者trustedPackages属性

    <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="trustAllPackages" value="true" /> -->
            <!-- 信任指定包路径的对象 -->
       		<property name="trustedPackages">
    	        <list>
    	            <value>longload.edu.demo.modal</value>
    	        </list>
       		</property>
    </bean>
  5. 消费者简单用例

    package longload.edu.demo.listener;
    
    import javax.annotation.Resource;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    
    import org.apache.activemq.command.ActiveMQObjectMessage;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.listener.SessionAwareMessageListener;
    
    import longload.edu.demo.modal.Mail;
    
    /**
     * @author longload
     * @date 2016年8月13日下午8:32:26
     */
    public class ConsumerSessionMessageLister implements SessionAwareMessageListener<Message>{
    	private Logger LOGGER=LoggerFactory.getLogger(this.getClass());
    	@Resource
    	private JmsTemplate jmsTemplate;
    	@Override
    	public void onMessage(Message message, Session session) throws JMSException {
    		LOGGER.info("==>receive message:" + message);
    		ActiveMQObjectMessage msg = (ActiveMQObjectMessage) message;
    		Mail mail = (Mail) msg.getObject();
    		LOGGER.info("subject:"+mail.getSubject());
    	}
    }
    
  6. 配置文件

    ## MQ address 链接地址
    mq.brokerURL=tcp\://192.168.48.129\:61616
    # 用户名和密码
    mq.userName=longload
    mq.password=test.123
    mq.pool.maxConnections=10
    #queueName 队列名称,指定发送或者接收的队列
    queueName=longload.mq.v1

 

 

 

 

标签: ActiveMQ
共有 人打赏支持
粉丝 4
博文 66
码字总数 104702
×
longload
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: