一、JMS概述
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。JMS是一种与厂商无关的 API,用来访问收发系统消息,它类似于 JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务
二、JMS相关概念
- 提供者:实现JMS规范的消息中间件服务器。
- 客户端:发送或者接收消息的应用程序。
- 生产者/发布者:创建并发送消息的客户端。
- 消费者/订阅者:接收并处理消息的客户端。
- 消息:应用程序之间传递的数据内容。
- 消息模式:在客户端之间传递消息的方式,JMS中定义了主题和队列两种模式。
三、消息模式
- 客户端包括生产者和消费者
- 队列中的消息只能被一个消费者消费
- 消费者可以随时消费队列中的消息
四、主题模式
- 客户端包括发布者和订阅者
- 主题中的消息被所有消费者使用
- 消费者不能消费订阅之前就发送到主题中的消息
五、JMS的编码接口
- ConnectionFactory 用于创建连接到消息中间件的连接工厂
- Connetion 代表了应用程序和消息服务器之间的通信链路
- Destination 指消息发布和接收的地点,包括队列或者主题
- Session 表示一个单线程的上下文,用于发送和接收消息
- MessageConsumer 由会话创建,用于接收发送到目标的消息
- MessageProducer 由会话创建,用于发送消息到目标
- Message 是在消费者和生产者之间传送的对象,消息头,一组消息属性,一个消息体
六、JMS编码接口之间的关系
七、安装ActiveMQ
-
下载官方网站:http://activemq.apache.org/
-
运行ActiveMQ服务:
下载,解压缩
大家现在好之后,将apache-activemq-5.11.1-bin.zip解压缩,我们可以看到它的整体目录结构:从它的目录来说,还是很简单的:
bin存放的是脚本文件
conf存放的是基本配置文件
data存放的是日志文件
docs存放的是说明文档
examples存放的是简单的实例
lib存放的是activemq所需jar包
webapps用于存放项目的目录 -
启动ActiveMQ :
我们了解activemq的基本目录,下面我们运行一下activemq服务,双击bin目录下的activemq.bat脚本文件或运行自己电脑版本下的activemq.bat,就可以看下图的效果。从上图我们可以看到activemq的存放地址,以及浏览器要访问的地址.
-
测试
ActiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试ActiveMQ是否成功启动 netstat -an|find “61616” -
监控
ActiveMQ默认启动时,启动了内置的jetty服务器,提供一个用于监控ActiveMQ的admin应用。
admin:http://127.0.0.1:8161/admin/
用户名和密码都是admin至此,服务端启动完毕
停止服务器,只需要按着Ctrl+Shift+C,之后输入y即可。
八、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,进行测试
九 什么情况下使用ActiveMQ?
- 多个项目之间集成
(1) 跨平台
(2) 多语言
(3) 多项目 - 降低系统间模块的耦合度,解耦
(1) 软件扩展性 - 系统前后端隔离
(1) 前后端隔离,屏蔽高安全区