定义:java
JMS是java消息服务(是目前java消息服务的一个统一的技术标准),它的思想是经过消息中间件(MOM)来接收以及发送消息。经过引入消息中间件,进行异步通讯,很好的缓解了同步时二者调用中产生延时(A应用等待B处理的结果)的痛苦,并很大程度的下降了两个应用之间的耦合性,使得两边任意一个应用转移,都不会对另一边的程序产生任何影响。python
优势:c++
1.发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;下降了耦合度 spring
2.异步处理,发送者和消费者的生命周期未必相同:发送消息的时候接收者不必定运行,接收消息的时候发送者也不必定运行;数据库
3.可以保证消息发送失败的时候进行存储(activemq中,推荐使用kahaDB进行文件存储)。 对于消息可达性要求高的应用,须要使用存储来保证可靠性。而对于那些实时消息应用则不须要存储,这样能够保证性能。一旦出现系统异常,消息队列中没有被MessageListener的onMessage方法获取的消息都会被存储下来,在下次系统启动的时候会自动完成获取那部分存储下来的数据,并完成onMessage方法的整个步骤。api
4.一对多通讯:对于一个消息能够有多个接收者。服务器
应用场景:网络
1.当出现多语言以前通讯的时候,activemq是一个选择。activemq的中间消息代理是java写的,天然有java客户端api,但同时它也提供了c/c++、python等其余语言的客户端。架构
2.当你须要多个应用通讯,而又不想被RPC技术所束缚的时候。RPC是同步的,慢的,耦合性强的,基于jms的activemq能够很好的弥补这个缺陷。框架
3.当须要两个应用之间解耦的时候。
4.当须要事件驱动架构的时候。好比订单,下了订单后不会等待,会立马跳转到一个下单成功的页面,但是这是后台程序还在执行,当有什么状态更新的时候,后台程序会主动调用一个接口来通知你。这整个流程就是一个事件驱动模式。你不须要等待任务,任务本身执行,有更新了会主动通知你。
5.面临着高可扩展性的不断发展。SOA思想不断渗透,现今的软件开发业务各自分离,支付宝专门作支付,淘宝、天猫就专门作本身的电商平台、顺丰也有本身的软件部门来处理物流方面的问题,业务不断拆分不断细化的同时,要链接多个应用,就须要进行网络通信,而同步的处理方式已经不能产生一个优良的用户体验,这时异步的JMS技术就能很好的解决这个问题。
ActiveMQ:
ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件
特色:
稳定性:失败重连机制failover,持久化服务,容错机制,多种恢复机制
高效性:支持多种传送协议TCP,SSL,NIO,UDP,集群服务消息在多个代理之间转发防止消息丢失,支持超快的JDBC消息持久化和高效的日志系统
可扩展:activemq的高级特性均可以配置的形式来表现,很好的实现例如游标,容错机制,消息group及监控服务,同时扩展了不少成熟的框架spring使得其使用更加成熟
高级特性
消息群组(Message Groups)、虚拟端点(Virtual Destinations)、通配符(Wildcards)、复合端点(Composite Destinations)
总体架构:
传输协议:消息之间的传递,无疑须要协议进行沟通,启动一个ActiveMQ打开了一个监听端口, ActiveMQ提供了普遍的链接模式,其中主要包括SSL、STOMP
、XMPP;ActiveMQ默认的使用的协议是openWire,端口号:61616;
消息域:ActiveMQ主要包含Point-to-Point (点对点),Publish/Subscribe Model (发布/订阅者),其中在Publich/Subscribe 模式下又有Nondurable subscription和 durable subscription (持久化订阅)2种消息处理方式
消息存储:在消息传递过程当中,部分重要的消息可能须要存储到数据库或文件系统中,当中介崩溃时,信息不回丢失
Cluster (集群): 最多见到 集群方式包括network of brokers和Master Slave;
Monitor (监控) :ActiveMQ通常由jmx来进行监控