JMS总结

1. JMS基本概念
JMS(Java Message Service)
是访问企业消息系统的标准API,它便于消息系
统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。

2. JMS基本功能
JMS
是用于和面向消息的中间件相互通信的应用程序接口。它既支持点对点(point-to-point)的域,又支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与旧的后台系统相集成。 下图是JMS的通信过程:

3.消息通信模型

JMS 支持两种消息通信模型:点到点(point-to-point)(PTP)模型和发布/订阅(Pub/Sub)模型。除了下列不同之外,这两种消息通信模型非常地相似:
PTP
模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。
点到点(point-to-point)(PTP)模型:

发布/订阅(Pub/Sub)模型:

4.消息组成

消息传递系统的中心就是消息。
一条 Message 分为三个组成部分:
· 头(header)是个标准字段集,客户机和供应商都用它来标识和路由消息。
· 属性(property)支持把可选头字段添加到消息。如果您的应用程序需要不使用标准头字段对消息编目和分类,您就可以添加一个属性到消息以实现这个编目和分类。提供 set<Type>Property(...) 和 get<Type>Property(...) 方法以设置和获取各种 Java 类型的属性,包括 Object。JMS 定义了一个供应商选择提供的标准属性集。
· 消息的主体(body)包含要发送给接收应用程序的内容。每个消息接口特定于它所支持的内容类型。
JMS 为不同类型的内容提供了它们各自的消息类型,但是所有消息都派生自 Message 接口。
· StreamMessage:包含 Java 基本数值流,用标准流操作来顺序的填充和读取。
· MapMessage:包含一组名/值对;名称为 string 类型,而值为 Java 的基本类型。
· TextMessage:包含一个 String。
· ObjectMessage:包含一个 Serializable Java 对象;能使用 JDK 的集合类。
· BytesMessage:包含未解释字节流: 编码主体以匹配现存的消息格式。
· XMLMessage: 包含XML内容。扩展TextMessage,XMLMessage 类型的使用,使得消息过滤非常便利

5.消息确认模式

 AUTO_ACKNOWLEDGE:自动确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收。
· CLIENT_ACKNOWLEDGE:客户端确认模式。会话对象依赖于应用程序对被接收的消息调用一个acknowledge()方法。一旦这个方法被调用,会话会确认最后一次确认之后所有接收到的消息。这种模式允许应用程序以一个调用来接收,处理并确认一批消息。注意:在管理控制台中,如果连接工厂的Acknowledge Policy(确认方针)属性被设置为"Previous"(提前),但是你希望为一个给定的会话确认所有接收到的消息,那么就用最后一条消息来调用acknowledge()方法。
· DUPS_OK_ACKNOWLEDGE:允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。注意:如果你的应用程序无法处理重复的消息的话,你应该避免使用这种模式。如果发送消息的初始化尝试失败,那么重复的消息可以被重新发送。

6.JMS的体系结构

JMS应用由以下几部分组成:

JMS provider :是一个消息系统,它实现了JMS 接口并提供管理和控制的功能。

JMS clients :是用Java语言写的一些程序和组件,它们产生和使用消息。

Messages :是在JMS clients之间传递的消息的对象。

Administered objects :是由使用JMS clients 的人生成的预选设置好的JMS 对象。有两种这样的对象:destinations和connection factories。

2.2. Message机制

JMS规范制定了两种Message机制:point-to-point和publish/subscribe。

2.2.1 point-to-point

point-to-point (PTP) 的产品和应用是建立在message queues, senders和receivers概念上的。 每一个message发送到某一个特定的queue, 然后接收客户从queue 里面提取messages。 Queues里保存所有发给接收客户的messages,直到messages被提供了或过期。

应该注意:

1.每一个message只有一个使用者。

2.一个message的sender和receiver没有时间上的依赖关系。无论sendere有没有在运行,Receiver都可提取message。

3.Receiver完成对message处理这后,发出确认。

当你所发出的每一个消息必须由一个使用者成功处理的情况下,使用 PTP messaging机制。

2.2.2 publish/subscribe

在publish/subscribe (pub/sub)产品或应用中, 客户发送messages到一个topic。Publishers和subscribers通常是匿名的并且可以动态发布或订阅。系统负责分发从多个publishers来的同一个topic的messages。当messages 分发到了所有目前的subscribers,Topics就不再保留他们。

Pub/sub messaging有如下的特点:

1.每一个message可以有多个使用者;

2.Publishers和subscribers在时间上有依赖关系。一个订阅了某一个topic的客户,只能使用在它生成订阅之后发布的message, 并且subscriber必须一直保持活动状态。

JMS API允许客户生成持久性的订阅,从而在某种程度上放宽了这种时间上的依赖关系, 提高了灵活性处可靠性。

2.2.3 Messaging的使用

Messaging本生是asynchronous的,使message的使用者之间没有时间上的依赖关系。但是,JMS规范给出了更精确的定义,使Message可以以两种方式被使用:

1.Synchronously:subscriber或receiver可以能过调用receive方法显示地从destination上提取message。Receive方法在收到一个 message后结束,或当message 在一定的时间限制内没有收到时超时结束。

2.Asynchronously:客户可以为某一个使用者注册一个message listener。message listener和event listener很相似。当一个message到达了destination, JMS provider通过调用listener的onMessage方法将message传递过去,由onMessage方法负责处理message。

一个JMS应用由以下几个模块组成:

3.1. Administered Objects

JMS应用的destinations和connection factories最后是通过管理而不是编程来使用,因为不同的provider使用他们的方法不一样。

JMS 客户应该使用同一的接口得到这些objects,从而使用JMS应用可以运行在不同provider上,而不需要修改或修改很少。通常管理员在JNDI上设置administered objects, 然后JMS clients 在JNDI上look up这些对象。

3.1.1 Connection Factories:

connection factory 是client用来生成与provider的connection的对象。connection factory封装了一套由管理员定义的connection configuration参数。每个connection factory 是一个QueueConnectionFactory 或 TopicConnectionFactory接口的实例。

在JMS 客户程序中, 通常先执行connection factory 的JNDI API lookup。

 

常见Java开源JMS消息中间件及特性简介:

mom4j是一个完全实现JMS1.1规范的消息中间件并且向下兼容JMS1.0与1.02.它提供了自己的消息处理存储使它独立于关系数据与语言,所以它的客户端可以用任何语言开发.

OpenJMS

OpenJMS是一个开源的JavaMessage Service API 1.0.2 规范的实现,它包含有以下特性:

  *. 它既支持点到点(point-to-point)(PTP)模型和发布/订阅(Pub/Sub)模型。

  *. 支持同步与异步消息发送

  *. JDBC持久性管理使用数据库表来存储消息

  *. 可视化管理界面。

  *. Applet支持。

  *. 能够与Jakarta Tomcat这样的Servlet容器结合。

  *. 支持RMI, TCP, HTTP 与SSL协议。

  *. 客户端验证

  *. 提供可靠消息传输、事务和消息过滤

  UberMQ

  UberMQ完全实现了Java Message Service 规范。UberMQ是因为现有的许多JMS提供商已经违背了分布式计算的核心原则:快速与简单而开发的。

  Hermes JMS

  利用它提供的Swing UI可以很好的实现监控JMS providers。

  ActiveMQ

  ActiveMQ是一个开放源码基于Apache2.0 licenced 发布并实现了JMS 1.1。它能够与Geronimo,轻量级容器和任Java应用程序无缝的给合。

  Somnifugi

  Somnifugi使得工作在同一个java虚拟机中的线程能实现消息互发。

  MantaRay

  MantaRay基于peer-2-peer 技术。它具有以下特性:

  1.它既支持点对点(point-to-point)的域,又支持发布/订阅(publish/subscribe)类型的域。

  2.并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。

  3.消息过滤体制。

  4.能与WebLogic and WebSphere 给合。

  5.支持TCP, UDP 与 HTTP传输协。

  Presumo

  Presumo也是一个实现Java Message Service API的JMS消息中间件。

  JORAM

  JORAM一个类似于openJMS分布在ObjectWeb之下的JMS消息中间件。

  JMS4Sdivad

  JMS4Sdivad是一个消息系统.它部分地实现了Java消息服务(JMS) API.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值