ActiveMQ是一种消息中间件,它实现了JMS规范,提供点对点和订阅-发布两种模式。下面介绍下ActiveMQ的使用;

一、环境的搭建

首先我们需要下载ActiveMQ的安装包,下载地址http://activemq.apache.org/activemq-510-release.html。

直接解压并拷贝到C盘中。最终的目录为:C:\Program Files\ActiveMQ。

下面就是启动ActiveMQ了,方法是进入到bin目录下,win32目录下,找到activemq.bat并双击;

然后便可以启动ActiveMQ了,启动的界面如下图所示;

然后在浏览器中输入如下地址http://localhost:8161/admin/ (用户名:admin,密码:damin)便可以进入到ActiveMQ的控制台中了。

下面就是代码的创建了。

 二、项目代码

1、maven依赖包:

<!-- ActiveMQ的依赖 -->
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-core</artifactId><version>5.5.0</version>
</dependency>
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client</artifactId><version>5.13.1</version>
</dependency>
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId><version>5.13.1</version>
</dependency>
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-broker</artifactId><version>5.13.1</version>
</dependency><!-- ActiveMQ+Spring的依赖 -->
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-spring</artifactId><version>5.12.2</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.1.9.RELEASE</version>
</dependency>

2、ActiveMQ和Spring的配置文件:

<?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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"default-autowire="byName"><!--第一步: 配置connectionFactory -->  <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  <property name="brokerURL" value="tcp://localhost:61616"/> <property name="userName"  value="admin"/><property name="password"  value="admin"/>  </bean>  <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">  <property name="connectionFactory" ref="targetConnectionFactory"/> <property name="maxConnections" value="10"/>  </bean>  <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  <property name="targetConnectionFactory" ref="pooledConnectionFactory"/>  </bean>  <!--第二步:配置JmsTemplate之消息生产者 --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->  <property name="connectionFactory" ref="connectionFactory"/>  </bean>  <!--队列目的地,点对点-->  <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">  <constructor-arg value="queue"/>  </bean>  <!--主题目的地,订阅发布-->  <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">  <constructor-arg value="topic"/> </bean>  <!--第三步:配置JmsTemplate之消息消费者 --><!-- 消息监听器 -->  <bean id="consumerMessageListener" class="com.zte.ems.springjms.listener.ConsumerMessageListener"/> <!-- com.zte.ems.springjms.listener.ConsumerMessageListener这个类是自己创建的,实现MessageListener 接口 --> <!-- 消息监听容器 -->  <bean id="jmsContainer"  class="org.springframework.jms.listener.DefaultMessageListenerContainer">  <property name="connectionFactory" ref="connectionFactory" />  <property name="queue_destination" ref="queueDestination" /><property name="topic_destination" ref="topicDestination" />  <property name="messageListener" ref="consumerMessageListener" />  </bean>
</beans>

 说明:

1)第一步:配置ConnectionFactory

  ConnectionFactory是用于产生到JMS服务器的链接的,Spring为我们提供了多个ConnectionFactory,有SingleConnectionFactory和CachingConnectionFactory。SingleConnectionFactory对于建立JMS服务器链接的请求会一直返回同一个链接,并且会忽略Connection的close方法调用。CachingConnectionFactory继承了SingleConnectionFactory,所以它拥有SingleConnectionFactory的所有功能,同时它还新增了缓存功能,它可以缓存Session、MessageProducer和MessageConsumer。这里我们使用SingleConnectionFactory来作为示例。Spring提供的ConnectionFactory只是Spring用于管理ConnectionFactory的,真正产生到JMS服务器链接的ConnectionFactory还得是由JMS服务厂商提供,并且需要把它注入到Spring提供的ConnectionFactory中。我们这里使用的是ActiveMQ实现的JMS,所以在我们这里真正的可以产生Connection的就应该是由ActiveMQ提供的ConnectionFactory。 ActiveMQ为我们提供了一个PooledConnectionFactory,通过往里面注入一个ActiveMQConnectionFactory可以用来将Connection、Session和MessageProducer池化,这样可以大大的减少我们的资源消耗。

2)第二步:配置消息生成者

  配置好ConnectionFactory之后我们就需要配置生产者。生产者负责产生消息并发送到JMS服务器,这通常对应的是我们的一个业务逻辑服务实现类。但是我们的服务实现类是怎么进行消息的发送的呢?这通常是利用Spring为我们提供的JmsTemplate类来实现的,所以配置生产者其实最核心的就是配置进行消息发送的JmsTemplate。对于消息发送者而言,它在发送消息的时候要知道自己该往哪里发,为此,我们在定义JmsTemplate的时候需要往里面注入一个Spring提供的ConnectionFactory对象。在真正利用JmsTemplate进行消息发送的时候,我们需要知道消息发送的目的地,即destination。在Jms中有一个用来表示目的地的Destination接口,它里面没有任何方法定义,只是用来做一个标识而已。当我们在使用JmsTemplate进行消息发送时没有指定destination的时候将使用默认的Destination。默认Destination可以通过在定义jmsTemplate bean对象时通过属性defaultDestination或defaultDestinationName来进行注入,defaultDestinationName对应的就是一个普通字符串。在ActiveMQ中实现了两种类型的Destination,一个是点对点的ActiveMQQueue,另一个就是支持订阅/发布模式的ActiveMQTopic。在定义这两种类型的Destination时我们都可以通过一个name属性来进行构造。

3)配置消息消费者

  生产者往指定目的地Destination发送消息后,接下来就是消费者对指定目的地的消息进行消费了。那么消费者是如何知道有生产者发送消息到指定目的地Destination了呢?这是通过Spring为我们封装的消息监听容器MessageListenerContainer实现的,它负责接收信息,并把接收到的信息分发给真正的MessageListener进行处理。每个消费者对应每个目的地都需要有对应的MessageListenerContainer。对于消息监听容器而言,除了要知道监听哪个目的地之外,还需要知道到哪里去监听,也就是说它还需要知道去监听哪个JMS服务器,这是通过在配置MessageConnectionFactory的时候往里面注入一个ConnectionFactory来实现的。所以我们在配置一个MessageListenerContainer的时候有三个属性必须指定,一个是表示从哪里监听的ConnectionFactory;一个是表示监听什么的Destination;一个是接收到消息以后进行消息处理的MessageListener。Spring一共为我们提供了两种类型的MessageListenerContainer,SimpleMessageListenerContainer和DefaultMessageListenerContainer。

SimpleMessageListenerContainer会在一开始的时候就创建一个会话session和消费者Consumer,并且会使用标准的JMS MessageConsumer.setMessageListener()方法注册监听器让JMS提供者调用监听器的回调函数。它不会动态的适应运行时需要和参与外部的事务管理。兼容性方面,它非常接近于独立的JMS规范,但一般不兼容Java EE的JMS限制。大多数情况下我们还是使用的DefaultMessageListenerContainer,跟SimpleMessageListenerContainer相比,DefaultMessageListenerContainer会动态的适应运行时需要,并且能够参与外部的事务管理。它很好的平衡了对JMS提供者要求低、先进功能如事务参与和兼容Java EE环境。

3.1)定义处理消息的MessageLisenter

package com.zte.ems.springjim.listener;
import javax.jms.Message;
import javax.jms.MessageListener;
public class ConsumerMessageListener implements MessageListener {public void onMessage(Message arg0) {// 这里我们就是监听生产者发送过来的消息,然后进行处理
    }
}

3.2)消息监听器容器:

  消息监听器容器(message listener container)是一个特殊的bean,它可以监控JMS目的地并等待消息到达。一旦有消息到达,它就取出消息,然后把消息传递给任意一个对此消息感兴趣的消息监听器。

转载于:https://www.cnblogs.com/wrong5566/p/6033094.html

ActiveMQ的简单例子应用相关推荐

  1. webpack入门之简单例子跑起来

    webpack入门之简单例子跑起来 webpack介绍 Webpack是当下最热门的前端资源模块化管理和打包工具,它可以将很多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源,还可以将按需加载 ...

  2. 图片上传(加水印、缩略图、远程保存)的简单例子

    图片上传(加水印.缩略图.远程保存)的简单例子(应用于51aspx.com) 该源码下载地址:http://51aspx.com/CV/ImageUpload 今天看到xiongeee发的文章使用使用 ...

  3. java hashtable import,Hashtable的一个简单例子

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以下是关于Hashtable的简单例子,谁知道别的遍历Hashtable的方法,请回复! package no1; import java.util.En ...

  4. SAP MM采购定价过程的一个简单例子

    SAP MM采购定价过程的一个简单例子 本文以一个简单的例子阐述了SAP MM模块中采购定价的基本原理.本例中,假定采购订单里输入的是含税采购价,然后系统自动计算出物料最终的采购价格(含税价-税额=采 ...

  5. .net中使用反射的简单例子

    说明:由于工作原因,本人使用反射的机会不是很多,所以没有必要为了炫耀技术而使用这种技术,不过今天有人问到这方面的问题,所以做了一个简单例子,供初学者参考,代码如下: using System; usi ...

  6. linux下Makefile中包含有shared library动态链接库文件时候的简单例子

    如果不知道什么是makefile,可以首先看我的另一篇博客: linux下Makefile的简单例子及解释 http://www.cnblogs.com/lihaozy/archive/2012/08 ...

  7. java 国际化例子_JavaSE 国际化 简单例子

    ①在src下添加两个文件: base_zh_CN.properties Test=\u8fd9\u662f\u4e2d\u6587 base_en_US.properties Test=english ...

  8. 6翻了C语言,《嗨翻C语言》随书练习六 6章 二叉树简单例子

    二叉树简单例子/* <嗨翻C语言>随书练习 6章    2016-12-06 xiousheng@126.com  二叉树例子,警务罪犯判断档案系统,哈哈 书中可以专家系统例子 */ #i ...

  9. QT 信号与槽 最简单例子

    QT  信号与槽 最简单例子 main.cpp 和 my_head.h源码: [cpp] view plaincopy #ifndef MY_HEAD_H #define MY_HEAD_H #inc ...

最新文章

  1. 服务器温度3d显示,智能问答助手、3D可视化展示,腾讯医典“黑科技”助力科普更有温度...
  2. 给你的开源项目加一个绶带吧
  3. SpringBoot 发送邮件功能实现
  4. string转换成date类型_你竟然知道SpringMVC是如何完成类型转换和数据绑定的吗?...
  5. 定时任务(Spring Cloud Task)
  6. 面试中常问多线程相关的知识,在工作中到底用在哪里呢?
  7. C#中使用GUID的笔记
  8. Hibernate 的配置文件
  9. 如何解决Maple的应用在数学中
  10. 计算理论笔记 10月10日
  11. android ImageView加圆角
  12. 利用HP优盘启动盘格式化工具制作U盘Dos启动盘
  13. 服务器突然c盘的temp文件夹,c盘里突然出了很多TEMP文件?
  14. 自动化有道云笔记自动签到+看广告奖励
  15. mc小刘yeah粉丝网
  16. [源码阅读]解析Anime(JS动画库)核心(2)
  17. oracle虚拟机共享U盘,技巧分享:虚拟机也能使用U盘及USB设备
  18. 第一节计算机课要教什么作用,信息技术第一节课要求
  19. 选择防身武器,利用身边的物品才是王道
  20. html显示统计图数据模板_博客统计信息显示模板

热门文章

  1. png 转数组 工具_推荐8款实用在线制图工具
  2. ibm z系列服务器 cpu,低调发布:看IBM System Z系列大型机CPU
  3. 【转载】如果让我重做一次研究生--王泛森院士
  4. Ubuntu16.04LTS下搭建强化学习环境gym、tensorflow
  5. 世界对一名颓废者的惩罚——SDOI2019游记
  6. eclipse热部署_Spring Boot Devtools热部署
  7. html设置列表菜单,css 列表菜单的设计
  8. e站host地址_Linux系统怎么使用命令行查询公网IP地址
  9. 20211104 为什么矩阵的迹等于特征值之和,为什么矩阵的行列式等于特征值之积
  10. 关于跨DB增量(增、改)同步两张表的数据小技巧