概述
JMS(Java Messaging Services 消息传递服务),用于在特定系统内的多个单元和应用程序之间建立成功通信的网络。通常,它采用应用程序接口的形式,在队列路径的帮助下将消息从一个应用程序传递到另一个应用程序。JMS具有以下特点:
- 它是一个API接口协议,将消息从一个应用程序发送到另一个应用程序。
- 假设一个应用程序服务器位于中国,另一个应用程序位于其他国家/地区,JMS创建消息并将其从主机应用程序发送到接收消息的接收方应用程序。
- JMS由一个队列组成,在该队列中,它从一个应用程序创建消息,并且该消息将位于队列中,直到接收方应用程序收到该消息
简单的一句话描述是:Java消息服务 (JMS) API 是一种消息传递标准,它允许基于 Java 平台企业版 (Java EE) 的应用程序组件创建、发送、接收和读取消息。它支持松散耦合、可靠和异步的分布式通信
发展历史
Java消息服务由 Sun 微系统公司(2009年4月20日甲骨文将其收购)开发,是 Java 平台企业版的一部分。JMS 的第一个版本,即 JMS 1.0.2b 于 2001 年 6 月 26 日发布。JMS 的稳定版本是 2013 年 5 月 21 日发布的 JMS 2.0
- JMS 1.0
- JMS 1.0.1 (1998年10月5日)
- JMS 1.0.1a (1998年10月30日)
- JMS 1.0.2 (1999年12月17日)
- JMS 1.0.2a (1999年12月23日)
- JMS 1.0.2b (2001年8月27日)
- JMS 1.1 (2002年4月12日)
- JMS 2.0 (2013年5月21日)
- JMS 2.0a ( 2015年3月16日)
the Java Community Process 维护 JMS 2.0 命名为 JSR 343.
JMS技术规范
消息传递模型
JMS 为点对点 (P2P) 和发布/订阅 (Pub-Sub) 域提供支持,并且某些 JMS 客户端在单个应用程序中结合使用这两个域
点对点 (P2P)
- 这是一种通信方法,其中发送者(创建和发送消息的人)一次只能将消息发送给一个接收者(接收消息的接收者)。
- 此方法使用队列机制,其中消息将发送到队列,即目标点。发送方将消息发送到目标,目标中的接收方可以使用该消息。
- 重要的是,接收方已注册到目标,否则接收方将无法使用消息。
- 如果没有接收方注册到目标,则消息将位于目标中,直到任何接收方向目标注册以接收它。
- 任何发送方都不能发送消息,但一个接收方可以使用该消息
发布/订阅 (Pub-Sub)
- 这种通信方法允许发送方将消息传达给许多接收方。
- 与队列不同,它使用主题作为目标点。
- 因此,在此方法中,所有使用者都必须订阅目标点。
- 消息从发送方发送到目标点后,所有订阅 Topic 的活动接收方都可以使用该消息。
- 与队列不同,主题目标点不能保存消息,除非订阅的使用者在传递消息时处于非活动状态。
- 此类订阅称为持久订阅。
JMS模型架构
JMS系统由以下几个组件组成
- JMS Provider 提供程序:实现 JMS 规范的消息传递系统。
- JMS Clients 客户端:发送和接收消息的 Java 应用程序。
- Messages 消息:用于在 JMS 客户机之间传递信息的对象。
- Administered Objects 受管对象:由管理员为使用 JMS 客户机而创建的预配置的 JMS 对象
JMS 编程模型
JMS 应用程序由一组应用程序定义的消息和一组交换这些消息的客户端组成。JMS 客户端通过使用 JMS API 发送和接收消息进行交互。消息由三部分组成:头标志、属性和正文。
- 头标志(header),每封邮件都需要头标志,其中包含用于路由和标识邮件的信息。其中一些字段由 JMS 提供程序在生成和传递消息期间自动设置,而其他字段则由客户端逐条消息设置。
- 属性(Properties)是可选的,提供客户端可用于筛选消息的值。它们提供有关数据的其他信息,例如创建数据的进程、创建数据的时间。属性可以被视为标头的扩展,由属性名称/值对组成。使用属性,客户端可以通过指定充当选择条件的某些值来微调其消息选择。
- 主体也是可选的,包含要交换的实际数据。JMS 规范定义了 JMS 提供程序必须支持的六种类型或消息类:
- Message:这表示没有邮件正文的消息。
- StreamMessage:其正文包含 Java 基元类型流的消息。它是按顺序写入和读取的。
- MapMessage:其正文包含一组名称/值对的消息。未定义条目的顺序。
- TextMessage:其正文包含 Java 字符串的消息…如 XML 消息。
- ObjectMessage:其正文包含序列化 Java 对象的消息。
- BytesMessage:其正文包含未解释字节流的消息。
JMS接口编程
- ConnectionFactory接口:(连接工厂)创建Connection的工厂,根据不同的消息类型用户可以选择使用队列连接工厂或者使用主题连接工厂分别对应QueueConnectionFactory和TopicConnectionFactory
- Destination接口:Destination是一个包装了消息目的地标识符的授管对象,消息目的地是指:消息发布和消息接收的地点,要么是队列要么是主题。主要有两种类型的对象Queue和Topic
- Connection接口:Connection表示客户端和JMS系统之间建立了连接(实际上就是对应TCP/socket)的包装,Connection可以对应一个或者多个Session,Connection和连接工厂一样也有两种类型:QueueConnection和TopicConnection
- Session接口:Session是实际操作消息的接口,表示单线程的上下文,用于发送和接受消息。Session也分为QueueSession和TopicSession。
- MessageProducer接口:消息生产者Session创建并用于将消息发送到Destination。消费者可以是同步或者是异步接收队列和主题类型的消息。生产者有两种类型,QueueSender和TopicPublisher
- MessageConsumer接口:消息消费者由Session创建,用于接收发送到Destination的消息。消费者有两种类型:QueueReceive和TopicSubscriber
- Message接口:消息在消费者和生产者之间传递的对象
- MessageListener:消息监听器如果注册了消息监听器,那么消息达到了会自动的调用监听器的onMessage方法
资源
JSR 343: Java Message Service 2.0
网站总编:
内容审核:
内容审核: