文档章节

ActiveMQ开发配置与用例

longload
 longload
发布于 2016/08/11 22:23
字数 752
阅读 263
收藏 3
点赞 1
评论 0
  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集群方案(下)

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/51205822 目...

yunlielai ⋅ 04/15 ⋅ 0

ActiveMQ集群方案(上)

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/51124749 目...

yunlielai ⋅ 04/15 ⋅ 0

ActiveMQ初探(2)——与Spring整合

在上一章:ActiveMQ(1)——介绍与基本使用中,我们通过测试方法熟悉了ActiveMQ的流程,本章将ActiveMQ与Spring进行整合。 与Spring整合,除了原本的外,还需导入和包,如果Spring为5.0+,需...

yuanlaijike ⋅ 05/08 ⋅ 0

消息队列篇—详谈ActiveMQ消息队列模式的分析及使用

消息队列(Message Queue)是分布式系统中重要的组件,通用使用场景可以简单地描述为当不需要立即获得结果,但是并发量需控制时就需要使用消息队列。消息列队有两种消息模式,一种是点对点的...

afreon ⋅ 04/22 ⋅ 0

ActiveMQ初探(1)——介绍与基本使用

一、ActiveMQ 1.1 什么是ActiveMQ 是Apache出品,最流行的,能力强劲的。ActiveMQ是一个完全支持和规范的 实现,尽管规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊...

yuanlaijike ⋅ 04/15 ⋅ 0

ActiveMQ初探(3)——与SpringBoot整合

在上一章:ActiveMQ(2)——与Spring整合中,我们已经完成了ActiveMQ与Spring进行整合,本章将进行与SpringBoot整合。 发送即时消息 Step1:添加依赖包: 这里我们不使用网上大多数的,因为...

yuanlaijike ⋅ 05/08 ⋅ 0

ActiveMQ之web管理console

activeMQ有一个web管理端。 启动方式:./bin/activemq 关于jetty.xml、jetty-realm.properties、web.xml jetty.xml配置IP和port默认是8161. jetty.xml不同角色的访问权限。...

乾坤刀 ⋅ 06/13 ⋅ 0

爬虫架构 | 消息队列应用场景及ActiveMQ、RabbitMQ、RocketMQ、Kafka对比

前言:在之前的业务中,使用了Kafka和RabbitMQ两种消息队列,这篇文章来做一个总结。 消息队列中间件是分布式系统中重要的组件,主要实现异步消息,应用解耦,流量削峰及消息通讯等功能。 下...

小怪聊职场 ⋅ 04/26 ⋅ 0

漏网de鱼/fish java分布式商城B2C

系统介绍 Fish 是J2EE分布式开发,技术栈:(dubbo、zookeeper、activemq、Spring、SpringMVC、MyBatis、Shiro、redis、quartz、activiti、MYCAT) 包括核心模块如:用户管理、系统设置、权限...

漏网de鱼 ⋅ 04/23 ⋅ 0

ActiveMq笔记2-消息持久化

为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。 ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB, 无论使用哪种持久化方式,消息...

狂小白 ⋅ 02/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 9分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 11分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 22分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 23分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 26分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 27分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 57分钟前 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部