文档章节

ActiveMQ开发配置与用例

longload
 longload
发布于 2016/08/11 22:23
字数 752
阅读 270
收藏 3
  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

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
longload
粉丝 3
博文 66
码字总数 104702
作品 0
成都
程序员
ActiveMQ安装配置和使用简例

本文作者:Zhang Phil 原文链接:http://blog.csdn.net/zhangphil/article/details/48173665 ActiveMQ安装配置和使用简例 ActiveMQ是一套JMS(Java Message Service)开源消息服务实现的组件...

开开心心过
2015/09/02
0
0
Win7环境下安装ActiveMQ

参考ActiveMQ官方文档:http://activemq.apache.org/getting-started.html 安装ActiveMQ 近来要学习JMS,在网上查了些资料,发现ActiveMQ是比较流行的JMS开源框架,决定使用ActiveMQ来学习J...

纠结名字
2015/08/09
0
0
关于ActvieMQ在项目中的使用

正在了解ActiveMQ,本想找一本书了解,在网上书店搜了好久,发现只有一本英文版的《ActiveMQ in Action》,并且还要到美国代购,好几百块。关键还是着急要用,要买的话,到手后,黄花菜都凉了...

jia程序员
2014/03/19
0
0
ActiveMQ 5.15.x Release安装和配置--Linux篇

阅读目录: 1. 关闭防火墙和Selinux 2. 下载并安装ActiveMQ 5.15.x Release版本 3. 启动并验证 4.配置ActiveMQ 5.15.x Release自启动 5.注意事项以及说明 1. 关闭防火墙和Selinux Linux的防火...

loubobooo
2017/11/26
0
0
Ubuntu下安装ActiveMQ

主要参考http://www.jmkg.co.uk/2010/08/31/installing-activemq-on-ubuntu/,略有补充 1. 下载安装包,建立activemq用户,安装 下载最新的activemq,写此文时为5.7。 cd /opt/tar xvzf xxx...

RuralHunter
2013/01/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[Hive]JsonSerde使用指南

注意: 重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行,也就是说,serde不会对多行的Json有效。 因为这是由Hadoop处理文件的工作方式决定,文件必须是可拆分的,例如,Hadoop将在...

Mr_yul
25分钟前
1
0
54:mysql修改密码|连接mysql|mysql常用命令

1、mysql修改密码: root用户时mysql的超级管理员,默认mysql的密码是空的,直接可以连接上去的,不过这样不安全; 注释:为了方便的使用mysql,需要把mysql加入到环境变量里; #后续自己输入mys...

芬野de博客
33分钟前
1
0
鼠标单击复制粘贴标签中的内容

<span ref="spanContentOne" id="spanContentOne" style="font-size: 14px;">或许不是最亮眼,总比瞎买强一点</span><!--<input type="button" @click="copyClick('1')" value="复制" />-......

帝子兮
37分钟前
1
0
使用axel多线程疯狂下载

在Linux中比较常见见的下载工具是curl和wget,但是下载比较大的文件两者都不支持多线程, 断点续传的作用不见得能发挥到最大。今天介绍一个axel工具,开启多线程疯狂下载。 安装 Fedora/Cen...

linuxprobe16
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部