【JMS】JMS详解

【JMS】JMS详解一 JMS 介绍 nbsp nbsp nbsp nbsp nbsp nbsp JMS 即 Java 消息服务 JavaMessageS 应用程序接口 是一

大家好,欢迎来到IT知识分享网。

一、JMS介绍
二、JMS的体系架构

JMS由以下元素组成:

1、JMS提供者
连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。JMS服务提供者实现消息队列和通知,同时实现消息管理API。JMS已经是J2EE API的一部分了,J2EE服务器提供JMS服务。

2、JMS客户
生产或消费基于消息的Java的应用程序或对象。

3、JMS生产者
创建并发送消息的JMS客户。

4、JMS消费者
接收消息的JMS客户。

5、JMS消息
包括可以在JMS客户之间传递数据的对象。消息是服务提供者和客户端之间传递信息所使用信息单元。JMS消息由以下三部分组成:

  • 消息头(header)—JMS消息头包含许多字段,它们是消息发送后由JMS提供者或消息发送者产生的,用来表示消息、设置优先权和失效时间等等,并且为消息确定路由。
  • 属性(property)—用来添加删除消息头以外的附加消息。
  • 消息体(body)—JMS中定义了5种消息体:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。

6、JMS队列
一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。

7、JMS主题
一种支持发送消息给多个订阅者的机制。

三、JMS的五种消息类型

JMS1.1规范中规定了五种JMS类型:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。下面我们来逐个介绍:

1.创建一个TextMessage

2.解包一个TextMessage,去解包一个TextMessage类型的消息,客户端可以使用Message.getText方法:

3.创建一个BytesMessage

4.解包一个BytesMessage,当接收到一个ByteMessage时,可以使用下面的方式来解包:

5.创建一个MapMessage

6.解包一个MapMessage

7.创建一个StreamMessage

8.解包一个StreamMessage

9.创建一个ObjectMessage

10.解包ObjectMessage

四、JMS对象模型和应用程序接口

JMS对象模型包含如下几个要素:

1.连接工厂。连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。

2.JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。

3.JMS会话。JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。

4.JMS目的。JMS目的(Destination),又称为消息队列,是实际的消息源。

② 发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。

应用程序接口
这里写图片描述

ConnectionFactory 接口(连接工厂)
      用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改。管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂。

Connection 接口(连接)
      连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的连接。根据不同的连接类型,连接允许用户创建会话,以发送和接收队列和主题到目标。

Destination 接口(目标)
      目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员创建这些对象,然后用户通过JNDI发现它们。和连接工厂一样,管理员可以创建两种类型的目标,点对点模型的队列,以及发布者/订阅者模型的主题。

Session 接口(会话)
      表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。会话的好处是它支持事务。如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务之前,用户可以使用回滚操作取消这些消息。一个会话允许用户创建消息,生产者来发送消息,消费者来接收消息。

MessageConsumer 接口(消息消费者)
      由会话创建的对象,用于接收发送到目标的消息。消费者可以同步地(阻塞模式),或(非阻塞)接收队列和主题类型的消息。

MessageProducer 接口(消息生产者)
      由会话创建的对象,用于发送消息到目标。用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。

Message 接口(消息)
      是在消费者和生产者之间传送的对象,也就是说从一个应用程序传送到另一个应用程序。

五、JMS通信方式

JMS通信方式分为点对点通信和发布/订阅方式

1.点对点方式(point-to-point)

2.发布/订阅 方式(publish/subscriber Messaging)

六、JMS消息传递方式
topicPublisher.publish (message, DeliveryMode.PERSISTENT, 8, 10000); //Pub-Sub

queueSender.send(message,DeliveryMode.PERSISTENT, 8, 10000);//P2P 

      这个代码片断,有两种消息模型,映射递送方式是持久的,优先级为加快型,生存周期是10000 (以毫秒度量)。如果生存周期设置为零,这则消息将永远不会过期。当消息需要时间限制否则将使其无效时,设置生存周期是有用的。

七、JMS提供者

      要使用Java消息服务,你必须要有一个JMS提供者,管理会话和队列。既有开源的提供者也有专有的提供者。

开源的提供者包括:

专有的提供者包括:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129306.html

(0)
上一篇 2025-08-25 14:00
下一篇 2025-08-25 14:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信