JMS基础篇

JMS简介:html

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

定义:JMS(java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,而且经过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。JMS是一种与厂商无关的 API,用来访问消息收发系统消息。它相似于JDBC(Java DatabaseConnectivity):这里,JDBC 是能够用来访问许多不一样关系数据库的 API,而 JMS 则提供一样与厂商无关的访问方法,以访问消息收发服务.数据库

概念:网络

使用JMS 的应用程序被称为JMS 客户端,处理消息路由与传递的消息系统被称为JMS Provider,而JMS 应用则是由多个JMS 客户端和一个JMS Provider 构成的业务系统。发送消息的JMS 客户端被称为生产者(producer),而接收消息的JMS 客户端则被称为消费者(consumer)。同一JMS 客户端既能够是生产者也能够是消费者。session

  1. 基本概念数据结构

    JMS是java的消息服务,JMS的客户端之间能够经过JMS服务进行异步的消息传输。负载均衡

  2. 消息模型异步

    ○ Point-to-Point(P2P)
    ○ Publish/Subscribe(Pub/Sub)

    即点对点和发布订阅模型socket

  3. P2P分布式

    1. P2P模式图 

      PTP(point-to-point)即点对点消息传输模型。PTP以下图所示:

    2. 咱们能够看到,一个或多个生产者发送消息,消息m2先抵达了queue,而后m1也发出了,并一同存在于一个先进先出的queue里面。消费者也存在一个或多个,对queue里的消息进行消费。但消息被随机的一个消费者消费且仅消费一次。

    3. 涉及到的概念 
      1. 消息队列(Queue)
      2. 发送者(Sender)
      3. 接收者(Receiver)
      4. 每一个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
    4. P2P的特色

      1. 每一个消息只有一个消费者(Consumer)(即一旦被消费,消息就再也不在消息队列中)
      2. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息以后,无论接收者有没有正在运行,它不会影响到消息被发送到队列
      3. 接收者在成功接收消息以后需向队列应答成功

      若是你但愿发送的每一个消息都应该被成功处理的话,那么你须要P2P模式。

  4. Pub/Sub

    1. Pub/Sub模式图 
      这里写图片描述
    2. 涉及到的概念 
      1. 主题(Topic)
      2. 发布者(Publisher)
      3. 订阅者(Subscriber) 
        客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
    3. Pub/Sub的特色

      1. 每一个消息能够有多个消费者
      2. 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须建立一个订阅者以后,才能消费发布者的消息,并且为了消费消息,订阅者必须保持运行的状态。
      3. 为了缓和这样严格的时间相关性,JMS容许订阅者建立一个可持久化的订阅。这样,即便订阅者没有被激活(运行),它也能接收到发布者的消息。

      若是你但愿发送的消息能够不被作任何处理、或者被一个消息者处理、或者能够被多个消费者处理的话,那么能够采用Pub/Sub模型

    4. Queue与Topic的比较

      1. JMS Queue执行load balancer语义

          一条消息仅能被一个consumer收到。若是在message发送的时候没有可用的consumer,那么它讲被保存一直到能处理该message的consumer可用。若是一个consumer收到一条message后却不响应它,那么这条消息将被转到另一个consumer那儿。一个Queue能够有不少consumer,而且在多个可用的consumer中负载均衡。

      2. Topic实现publish和subscribe语义

          一条消息被publish时,他将发送给全部感兴趣的订阅者,因此零到多个subscriber将接收到消息的一个拷贝。可是在消息代理接收到消息时,只有激活订阅的subscriber可以得到消息的一个拷贝。

      3. 分别对应两种消息模式

          Point-to-Point(点对点),Publisher/Subscriber Model(发布/订阅者)

          其中在Publicher/Subscriber模式下又有Nondurable subscription(非持久化订阅)和durable subscription(持久化订阅)两种消息处理方式。

  5. 消息的消费 
    在JMS中,消息的产生和消费是异步的。对于消费者来讲,JMS的消费者能够经过两种方式来消费消息。 
    ○ 同步 
    订阅者或接收者调用receive方法来接收消息,receive方法在可以接收到消息以前(或超时以前)将一直阻塞 
    ○ 异步 
    订阅者或接收者能够注册为一个消息监听器。当消息到达以后,系统自动调用监听器的onMessage方法。

MQ(JMS Provider)         

   MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通讯方法。应用程序经过写和检索出入列队的针对应用程序的数据(消息)来通讯,而无需专用链接来连接它们.

JMS和MQ的关系:

JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程当中的全部数据结构和交互流程。而MQ则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者;MQ的实现能够基于JMS,也能够基于其余规范或标准。

支持JMS的开源MQ:

目前选择的最多的是ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个彻底支持JMS1.1和J2EE 1.4规范的 JMS Provider实现.

JMS接口API

流程以下:
发送端的标准流程是:建立链接工厂>建立链接>建立session>建立发送者>建立消息体>发送消息到Destination(queue或topic)。

  接收端则为:建立链接工厂>建立链接>建立session>建立接收者>建立消息监听器监听某Destination的消息>获取消息并执行业务逻辑

接口简介:
 

顶级接口

P2P

Pub/sub

备注

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

基于工厂模式,建立和JMS提供者之间的连接,须要制定连接的URL或者协议;任何JMS客户端和JMS提供者之间的交互,都必须基于制定的链接.

Destination

Queue

Topic

“目的地”,用于描述消息的通道类型,是JMS提供者用于标记消息归属类型的”标记”.
 

Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来讲,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来讲,它的Destination也是某个队列或主题(即消息来源)。

因此,Destination实际上就是两种类型的对象:Queue、Topic

Connection

QueueConnection

TopicConnection

Connection表示在客户端和JMS系统之间创建的连接(对TCP/IP socket的包装)。Connection能够产生一个或多个Session。跟ConnectionFactory同样,Connection也有两种类型:QueueConnection和TopicConnection。

Session

QueueSession

TopicSession

“会话”,在逻辑上用于区分JMS客户端,由于”连接”可被公用以提升网络利用率;每一个session能够支持相互独立的”事务”和相关属性.每一个session都有ID.


Session是咱们操做消息的接口。能够经过session建立生产者、消费者、消息等。Session提供了事务的功能。当咱们须要使用session发送/接收多个消息时,能够将这些发送/接收动做放到一个事务中。一样,也分QueueSession和TopicSession。

Message

--

--

“消息”,JMS API中提供了多种类型Message,它们有各自的”序列化/反序列化”机制;消息中能够包含多种JMS属性以及客户端自定义的消息属性和内容.

MessageProducer

QueueSender

TopicPublisher

“生产者”,一种能够向JMS提供者提交消息的客户端类型.

MessageConsumer

QueueReceiver

TopicSubscriber

“消费者”,一种能够向JMS提供获取消息的客户端类型.

 

 

至此,JMS的基本概念以及经常使用的接口Api大体了解.更深层次的理解须要在实际的业务代码中去理解.

参考:

http://www.cnblogs.com/whsa/p/4223728.html

http://blog.csdn.net/jiuqiyuliang/article/details/46701559

相关文章
相关标签/搜索