1. 什么是ActiveMQ?

  ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和j2ee1.4规范的JMS Provider实现的消息中间件(Message Oriented Middleware, MOM).

2. ActiveMQ能干什么?

  最主要的功能就是:实现JMS Provider ,用来帮助实现高可用,高性能,可伸缩,易用和安全的企业级面向消息服务的系统。

3. ActiveMQ的特点:

  多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

  完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)

  对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

  通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上

  支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

  支持通过JDBC和journal提供高速的消息持久化

  从设计上保证了高性能的集群,客户端-服务器,点对点

  支持Ajax

  支持与Axis的整合

  可以很容易得调用内嵌JMS provider,进行测试

4.ActiveMQ的安装

  ActiveMQ官网下载地址:http://activemq.apache.org/download.html

  

  这里下载的5.15.6windows版的zip包,下载后直接解压到需要的文件夹,如果想要方便开启ActiveMQ也可以自己配置环境变量,配置环境变量的方式这里就不再详述。

  解压之后的目录

    

  bin存放的是脚本文件

  conf存放的是基本配置文件

  data存放的是日志文件

  docs存放的是说明文档

  webapps-demo存放的是简单的实例

  lib存放的是activemq所需jar包

  webapps用于存放项目的目录

  activemq-all-5.15.6.jar是使用ActiveMQ时需要依赖的jar

  进入到安装目录的bin目录下(配置了环境变量可以直接在任意位置)打开cmd,输入命令:activemq start开启ActiveMQ, activemq stop 关闭。

  如果报:

Caused by: java.io.IOException: Failed to bind to server socket: tcp://0.0.0.0:61616?maximumConnections=1000&wireformat.maxFrameSize=104857600 due to: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind

  表示默认端口61616被占用。在大多数情况下,占用61616端口的是Internet Connection Sharing (ICS) 这个Windows服务,你只需停止它就可以启动ActiveMQ了。

  如果报:

Failed to bind to server socket: amqp://0.0.0.0:5672?maximumConnections=1000&wireformat.maxFrameSize=104857600 due to:
java.net.BindException: Address already in use: JVM_Bind

  是5672端口被占用,修改conf/activemq.xml中的conf/activemq.xml中的端口即可。

<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireformat.maxFrameSize=104857600"/>

  访问:http://localhost:8161/

  我们在浏览器打开链接之后输入账号密码

  默认账号:admin

  密码:admin

  如下则表示安装成功

  

5. 什么情况下使用ActiveMQ

    1. 多个项目之间集成 
      (1) 跨平台 
      (2) 多语言 
      (3) 多项目
    2. 降低系统间模块的耦合度,解耦 
      (1) 软件扩展性
    3. 系统前后端隔离 
      (1) 前后端隔离,屏蔽高安全区

6. 简单使用ActiveMQ

  新建一个maven项目,引入依赖(非maven项目直接将安装目录中的activemq-all.jar直接考到项目 的lib文件夹下)

  pom.xml文件如下

  <dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.6</version>
</dependency>

  新建一个生产者类

  

package com.wangx.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class MessageSender {

    public static void main(String[] args) throws JMSException {
//创建链接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,ActiveMQConnectionFactory.DEFAULT_BROKER_URL); Connection connection = null;
Session session = null;
try{
//创建链接
connection = factory.createConnection();
//启动链接
connection.start();
//获取会话
session = connection.createSession(Boolean.TRUE, session.AUTO_ACKNOWLEDGE);
//创建队列
Destination queue = session.createQueue("myQueue");
//创建生产者对象
MessageProducer messageProducer = session.createProducer(queue); for (int i = 0; i < 9; i++) {
//创建消息对象
TextMessage textMessage = session.createTextMessage("hello:" + i);
//发送消息
messageProducer.send(textMessage);
System.out.println(textMessage.getText());
}
session.commit();
session.close();
connection.close();
}catch (Exception e) { }finally {
} }
}

  运行消费者,将消息发送到ActiveMQ中,现在并没有消费者消费,但是我们访问http://localhost:8161可以看到消息已经在队列中了

  

  生产的消息已经有9条消息了。

  创建消费者

  

package com.wangx.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class MessageReceive {

    public static void main(String[] args) {
//创建链接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
Connection connection = null;
Session session = null;
try{
//创建链接
connection = factory.createConnection();
//启动链接
connection.start();
//获取会话
session = connection.createSession(Boolean.TRUE, session.AUTO_ACKNOWLEDGE);
//创建队列
Destination queue = session.createQueue("myQueue");
//创建消费者
MessageConsumer messageConsumer = session.createConsumer(queue);
//监听消息
while(true){
TextMessage msg = (TextMessage) messageConsumer.receive();
if(msg!=null) {
msg.acknowledge();
System.out.println(Thread.currentThread().getName()+": Consumer:我是消费者,我正在消费Msg"+msg.getText()+"--->");
}else {
break;
}
}
session.commit();
session.close();
connection.close();
}catch (Exception e) { }
}
}

  控制台输出:

main: Consumer:我是消费者,我正在消费Msghello:0--->
main: Consumer:我是消费者,我正在消费Msghello:1--->
main: Consumer:我是消费者,我正在消费Msghello:2--->
main: Consumer:我是消费者,我正在消费Msghello:3--->
main: Consumer:我是消费者,我正在消费Msghello:4--->
main: Consumer:我是消费者,我正在消费Msghello:5--->
main: Consumer:我是消费者,我正在消费Msghello:6--->
main: Consumer:我是消费者,我正在消费Msghello:7--->
main: Consumer:我是消费者,我正在消费Msghello:8--->
main: Consumer:我是消费者,我正在消费Msghello:0--->
main: Consumer:我是消费者,我正在消费Msghello:1--->
main: Consumer:我是消费者,我正在消费Msghello:2--->
main: Consumer:我是消费者,我正在消费Msghello:3--->
main: Consumer:我是消费者,我正在消费Msghello:4--->
main: Consumer:我是消费者,我正在消费Msghello:5--->
main: Consumer:我是消费者,我正在消费Msghello:6--->
main: Consumer:我是消费者,我正在消费Msghello:7--->
main: Consumer:我是消费者,我正在消费Msghello:8--->

  可以看到,当消费者消费完队列中的消息后,将会一直等在receive()上监听消息的产生,直到队列中有新的消息被生产,会再次返回消息。

ActiveMQ学习笔记(1)----初识ActiveMQ的更多相关文章

  1. ActiveMQ学习笔记(5)——使用Spring JMS收发消息

      摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...

  2. Storm学习笔记 - Storm初识

    Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...

  3. LevelDB学习笔记 (1):初识LevelDB

    LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...

  4. apache activemq 学习笔记

    0.activemq的概念 activemq实现了jms(java Message server),用于接收,发送,处理消息的开源消息总线. 1.activemq和jms的区别 jms说白了就是jav ...

  5. ActiveMQ 学习笔记

    http://somebody-hjh.iteye.com/blog/726050 一.概述 Message,即消息.人与人之间通过消息传递信息.言语.眼神.肢体动作都可被视为消息体.当然还有我们经常 ...

  6. ActiveMQ学习笔记(一) JMS概要

    (一)什么是JMS jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  7. ActiveMQ学习笔记1

    1.接口 JMS 公共 点对点域 发布/订阅域 ConnectionFactory QueueConnectionFactory TopicConnectionFactory Connection Q ...

  8. ActiveMQ学习笔记(21)----ActiveMQ集成Tomcat

    1. 监控和管理Broker Web Console 方式:直接访问ActiveMQ的管理页面:http://localhost:8161/admin,默认的用户名和密码是admin/admin.具体 ...

  9. ActiveMQ学习笔记(18)----Message高级特性(二)

    1. Blob Message 有些时候,我们需要传递Blob(Binary Large Objects)消息,在5.14之前,(5.12和5.13需要在jetty.xml中手动开启)可以按照如下的方 ...

随机推荐

  1. ThinkPHP5(目录,路径,模式设置,命名空间)

    ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架 目录结构 路径: http://www.tp5.comm/index.php/admin/index/index入口文件    pu ...

  2. 1到32 数字正则 还有IP的

    正则是按位解析匹配的,所以[1-32]是不行的. 解析: 1.1-32,包含1位数(1-9)和2位数(10-32) 2.10-32必须切割,10-19和20-29形式一样,得到[12][0-9],30 ...

  3. 人人都是产品经理?关于PM你不知道的还有很多

    产品经理的职称最早出现在P&G宝洁公司,因效果非常显著,许多企业纷纷仿而效尤.硅谷知名的产品管理大师Marty Cagan在<Inspired: How To Create Produc ...

  4. JAVA 静态内部类--转自http://bbs.csdn.net/topics/350021609

    内部类其实并不是非要声明成static的..主要还是要看实际情况决定..静态和非静态有不同的作用.. 引用一篇文章给楼主参考下吧. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的( ...

  5. 用私有构造器或枚举类型强化Singleton

    Singleton指只有一个实例的类,只能被创建一次. 在Java1.5之前实现Singleton有两种方式,都是将构造器设为private并导出公有的静态成员实例. 第一种方式将公有的静态成员实例设 ...

  6. BZOJ 3910 火车 倍增LCA

    本题并不需要并查集,每次查询一次最近公共祖先,并倍增求出需要被新标记的路径. 这样保证时间复杂度是 O(nlogn)O(nlogn)O(nlogn) 的. Code: #include<cstd ...

  7. css——定位

    position absolute:绝对定位 1.以页面的左上角为原点 2.不保留原来的位置 3.z-index可以调整图层顺序 如果想实现以父级元素左上角为原点.则:父级相对,子级绝对 在子级绝对的 ...

  8. hp soap扩展最全说明,附天气预报调用的例子

    自从php5开始,我们可以不用通过php nusoap来创建php soap web service 和调用 soap了,php5内置了 soap扩展.只需要在php.ini中开启soap的exten ...

  9. [USACO18FEB] Snow Boots G (离线+并查集)

    题目大意:略 网上各种神仙做法,本蒟蒻只想了一个离线+并查集的做法 对所有靴子按最大能踩的深度从大到小排序,再把所有地砖按照积雪深度从大到小排序 一个小贪心思想,我们肯定是在 连续不能踩的地砖之前 的 ...

  10. js中的变量提升和函数提升

    从上周开始,我所在的学习小组正式开始了angular的学习,angular是全面支持es6的,所以语法上和以前的angular有了很大的不同,比如变量声明时就抛弃了var,而选择了let和const: ...