前一段在组内作过一次有关《JMS和ActiveMQ介绍》的技术分享,今天把幻灯片整理了一下,但愿和你们多交流。java
JMS,java消息服务是由Sun提出的一套消息传送API规范,而ActiveMQ是一款开源的消息服务器产品。服务器
消息传送机制是在多个系统之间引入消息服务器,由消息服务器接收来自各系统的消息并将消息转发到相应的系统上,以实现各系统之间的通讯。并发
而在每一个系统中,应用程序经过调用消息传送API来进行消息的发送和接收,消息传送API再经过各消息服务器所对应的消息传送客户端将消息发送至服务器或从服务器接收消息。负载均衡
目前,消息服务器产品中,异步
属于商业软件的有:IBM WebSphere MQ、SonicMQ、Microsoft Message Queuing(mSMQ);ide
属于开源软件的有:ActiveMQ、OpenMQ、RabbitMQ。ui
虽然消息服务器产品较多,但基本遵循同一个消息传送API规范,即JMS(Java Message Service,Java消息服务):spa
1)JMS是由Sun发起建立;设计
2)它与JDBC相似,只定义消息传送的相关接口,由消息服务器产品本身实现相应的接口功能;blog
所以,在使用不一样的消息服务器产品时,系统中的应用程序可使用同一个消息传送API。
消息传送机制具备如下优势:
1)能够实现异构集成,不一样平台、不一样语言的系统能够经过消息进行通讯,实现集成。例如,ActiveMQ支持多语言,除Java之外,还包括C、PHP、Python。
2)能够缓解系统瓶颈,当系统同步处理的请求数量增大时,会形成请求阻塞,若是使用消息传送机制,能够将请求以消息方式发送至消息服务器,并由多个请求处理模块接收消息进行并发处理。
3)能够提升可伸缩性,这个与缓解系统瓶颈相似,经过增长或减小消息接收者来控制并发处理的能力,提升可伸缩性。
4)能够提升最终用户生产率,这是由于使用消息传送机制时,能够对请求进行异步处理,请求以消息方式发送至消息服务器后,最终用户无需同步等待请求返回结果。
5)体系结构灵活性和敏捷性,咱们知道系统设计的一个基本原则就是高内聚、低耦合,经过引入消息传送机制,各系统服务以消息的形式抽象出来,减小系统之间的耦合,提升系统结构灵活性和敏捷性。
首先,先引入如下概念:
JMS提供者(Provider),消息服务器;
目的地(Destination、Queue、Topic),消息在JMS提供者中的目的地;
生产者(Producer、Sender、Publisher),发送消息;
消费者(Consumer、Receiver、Subscriber),接收消息。
两种消息传送模型:
队列(一对一):
基于拉取(Pull)或基于轮询(polling);
发送到队列的消息被一个并且仅仅一个接收者所接收,即便有多个接收者在一个队列中侦听同一消息;
既支持异步“即发即弃”消息传送方式,又支持同步请求/应答消息传送方式;
支持负载均衡。
主题(一对多):
基于推送(push)的模型,其中消息自动地向消费者广播,它们无须请求或轮询主题来得到新消息。