JMS简介:
JMS,即Java Message Service,通过面向消息中间件(MOM:Message Oriented Middleware)的方式很好的解决了应用系统中client和server通信的一些缺陷问题,问题如下所示:
1、通信的同步性:client端发起调用后,必须等待server处理完成并返回结果后才能继续执行
2、client 和 server 的生命周期耦合太高:client进程和server服务进程都必须可用,如果server出现问题或者网络故障,那么client端会收到异常
3、点对点通信:client端的一次调用只能发送给某一个单独的服务对象,无法一对多。
JMS解决问题的过程大致是这样的:发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题中,在合适的时候,消息服务器会将消息转发给接受者。在这个过程中,发送和接受是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然关系。
需要注意的是,JMS只是定义了Java访问消息中间件的接口,然后由具体的中间件去实现,比如ActiveMQ就是实现了JMS的一种Provider,还有阿里巴巴的RocketMQ。这些消息中间件都符合JMS规范。
ActiveMQ优缺点
优点:
1、支持多种语言和协议编写客户端,语言:Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议:OpenWire,Stomp REST,WS Notification,XMPP,AMQP。
2、完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3、适合的场景是默认消息都可在短时间内被消费。数据量越大,查找和消费消息就越慢,消息积压程度与消息速度成反比。
缺点:
1、吞吐量低。由于ActiveMQ需要建立索引,导致吞吐量下降。这是无法克服的缺点,只要使用完全符合JMS规范的消息中间件,就要接受这个级别的TPS。
2、无分片功能。这是一个功能缺失,JMS并没有规定消息中间件的集群、分片机制。而由于ActiveMQ是为企业级开发设计的消息中间件,初衷并不是为了处理海量消息和高并发请求。如果一台服务器不能承受更多消息,则需要横向拆分。ActiveMQ官方不提供分片机制,需要自己实现。
适用场景
对TPS要求比较低的系统,可以使用ActiveMQ来实现,一方面比较简单,能够快速上手开发,另一方面可控性也比较好,还有比较好的监控机制和界面。
tps:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
不适用场景
消息量巨大的场景。ActiveMQ不支持消息自动分片机制,如果消息量巨大,导致一台服务器不能处理全部消息,就需要自己开发消息分片功能(消息量巨大,Kafka就是为大数据量而生的)
安装第一步:下载安装包
进入官网http://activemq.apache.org/,选择适合自己的版本,点击Download Latest
安装第二步:解压下载完的文件
安装第三步:启动activemq服务
进入bin的目录下,这里面有activemq.bat、win64、win32。若直接启动activemq.bat,如果你的电脑是64位操作系统的,那么就启动不了的,需要进入win64文件夹里面启动,点击activemq.bat,如图所示:
安装第四步:检测是否启动成功
在浏览器内输入http://localhost:8161/admin测试是否启动成功