初识JMS

来源:互联网 发布:网络卖电影挣钱 编辑:程序博客网 时间:2024/05/17 05:58

JMS简介

JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

JMS基础

1.连接工厂(JMS connectionFactory)

连接工厂是客户用来创建连接的对象。根据JNDI来查询。

2.连接(connection)

JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。

3.会话(session)

JMS Session是生产消息和消费消息的一个单线程上下文。会话用于创建消息生产者(producer)、消息消费者(consumer)和消息(message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。

4.目的地(destination)

目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。

消息传递模式:
1 Point-to-Point 消息(P2P) 点对点;
2 Publish Subscribe messaging(Pub/Sub)发布/订阅消息

在点对点消息传递域中,目的地被称为队列(queue);在发布/订阅消息传递域中,目的地被称为主题(topic)。

5.消息生产者(producer)

消息生产者是会话创建的一个对象,用于把消息发送到一个目的地。

6.消息消费者(consumer)

消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。
同步消费: 通过调用消费者的receive方法从目的地中显式提取消息。receive方法可以一直阻塞到消息到达。
异步消费: 客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。消费者类必须实现MessageListener接口,然后在onMessage方法中监听消息的到达并处理。

7.消息(message)

JMS消息由以下三部分组成:
消息头:每个消息头字段都有相应的getter和setter方法。
消息属性:如果需要除消息头字段以外的值,那么可以使用消息属性。
消息体:JMS定义的消息类型有,简单文本(TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、字节流(BytesMessage)、原始值流(StreamMessage)

应用场景

1.同步转异步处理,减轻服务器压力

消息队列在大型电子商务类网站,如京东、淘宝、去哪儿等网站有这深入的应用,队列的主要作用是消除高并发访问高峰,加快网站的响应速度。在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同时也使得系统响应延迟加剧。在使用队列后,用户的请求发给队列后立即返回(当然不能直接给用户提示订单提交成功,京东上提示:您“您提交了订单,请等待系统确认”),再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列的服务处理速度远快于数据库,因此用户的响应延迟可得到有效改善。

2.异构应用

JMS的大多实现通常支持多客户端,如ActiveMQ,虽然为是JAVA平台的, 但它有很多客户端.C/C++, .NET, Perl, PHP, Python, Ruby, 同时ActiveMQ也是跨平台的.

3.替代RPC的解决方案

应用程序广泛地使用RPC风格调用实现同步. 很多C/S应用程序使用RPC包括ATMs, 大多数的web应用程序,信息卡系统,POS机等. 如果同步出现down机情况, 用户体验相当不好. 使用异步消息, 更多的消息接收者能更容易增加消息, 支持并发并且处理得更快. 这时,应用程序已经被解耦.

4.使得应用之间松耦合.

紧耦合有很多问题,特别是分布式情况下. 松耦合架构, 使得应用程序很灵活, 也可以引导出event-driven architecture (EDA)

5.事件驱动构架的基石

解耦,异步风格的架构通过调优允许Broker伸缩来更进一步来处理相当多的客户端, 更多是内存分配,等等 (称为垂直可伸缩性), 而不是仅依靠增加Broker节点的数目去处理很多更多客户端(称为水平可伸缩性) 的能力。

0 0
原创粉丝点击