在介绍 ActiveMQ 之前,我们先了解一下什么是 JMS 。
什么是 JMS ?
JMS 全称:Java Message Service 中文:Java消息服务。
Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持JAVA应用程序开发。在J2EE中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务连接起来,可以达到解耦的效果,我们将会在接下来的教程中详细介绍 ActiveMQ 消息中间件。
为什么要使用 JMS ?
在JAVA中,如果两个应用程序之间对各自都不了解,甚至这两个程序可能部署在不同的大洲上,那么它们之间如何发送消息呢?举个例子,一个应用程序A部署在印度,另一个应用程序部署在美国,然后每当A触发某件事后,B想从A获取一些更新信息。当然,也有可能不止一个B对A的更新信息感兴趣,可能会有N个类似B的应用程序想从A中获取更新的信息。
在这种情况下,JAVA提供了最佳的解决方案-JMS,完美解决了上面讨论的问题。
JMS同样适用于基于事件的应用程序,如聊天服务,它需要一种发布事件机制向所有与服务器连接的客户端发送消息。JMS与RMI不同,发送消息的时候,接收者不需要在线。服务器发送了消息,然后就不管了;等到客户端上线的时候,能保证接收到服务器发送的消息。这是一个很强大的解决方案,能处理当今世界很多普遍问题。
什么是消息队列?
“消息队列”是在消息的传输过程中保存消息的容器。
常用的消息中间件
ActiveMQ
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 规范的 JMS Provider实现。
RabbitMQ
RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。开发语言为Erlang。
RocketMQ
由阿里巴巴定义开发的一套消息队列应用服务。
消息队列的应用场景请看 : https://segmentfault.com/a/1190000017130224
ActiveMQ简介
ActiveMQ特点
ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。ActiveMQ 实现了 JMS 1.1 并提供了很多附加的特性,比如 JMX 管理、主从管理、消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化、消息队列监控等等。其主要特性有:
- 1、支持包括 Java、C、C++、C#、Ruby、Perl、Python、PHP 等多种语言的客户端和协议。协议包含 OpenWire、Stomp、AMQP、MQTT 。
- 2、提供了像消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化之类的高级特性
- 3、完全支持 JMS 1.1 和 J2EE 1.4规范(包括持久化、分布式事务消息、事务)
- 4、对 Spring 框架的支持,ActiveMQ 可以通过 Spring 的配置文件方式很容易嵌入到 Spring 应用中
- 5、通过了常见的 J2EE 服务器测试,比如 TomEE、Geronimo、JBoss、GlassFish、WebLogic
- 6、连接方式的多样化,ActiveMQ 提供了多种连接模式,例如 in-VM、TCP、SSL、NIO、UDP、多播、JGroups、JXTA
- 7、支持通过使用 JDBC 和 journal 实现消息的快速持久化
- 8、为高性能集群、客户端-服务器、点对点通信等场景而设计
- 9、提供了技术和语言中立的 REST API 接口
- 10、支持 Ajax 方式调用 ActiveMQ
- 11、ActiveMQ 可以轻松地与 CXF、Axis 等 Web Service 技术整合,以提供可靠的消息传递
- 12、可用作为内存中的 JMS 提供者,非常适合 JMS 单元测试
消息传送模型
点对点模型(Point to Point)
使用队列(Queue)作为消息通信载体,满足生产者与消费者模式,一条消息只能被一个消费者使用,未被消费的消息在队列中保留直到被消费或超时。
发布订阅模型(Pub/Sub)
使用主题作为消息通信载体,类似于广播模式,发布者发布一条消息,该消息通过主题传递给所有的订阅者,在一条消息广播之后才订阅的用户则是收不到该条消息的。
ActiveMQ 的安装
下载文件:
ActiveMQ 官方网站:http://activemq.apache.org/
百度云盘链接:链接: https://pan.baidu.com/s/1FWnmC21C0jTEfGbe2E-y3A
在这里我是直接在线下载:
wget http://www.apache.org/dyn/closer.cgi?filename=/activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz&action=download
版本说明
ActiveMQ5.10.x以上版本必须使用JDK1.8才能正常使用。
ActiveMQ5.9.x及以下版本使用JDK1.7即可正常使用。
注意:
由于 ActiveMQ 是由纯 Java 程序,所以必须要有 Java 的运行环境。
解压缩
tar -zxvf apache-activemq-5.15.9-bin.tar.gz
重命名
mv apache-activemq-5.15.9 activemq
检查权限
ls -al activemq/bin
如果权限不足,则无法执行,需要修改文件权限:
chmod 755 activemq
启动 ActiveMQ 服务
./activemq/bin/activemq start
检查进程
ps aux | grep activemq
见到下述内容即代表启动成功
登录管理界面
启动成功后,在浏览器中访问:http://ip:8161/admin
用户名:admin
密码:admin
见到如下界面:
修改端口
修改 conf 下的 jetty.xml 文件中的 port 参数重启即可:
重启 ActiveMQ
./activemq/bin/activemq restart
关闭 ActiveMQ
./activemq/bin/activemq stop