ActiveMQ in Action
### ActiveMQ in Action: 关键知识点详解 #### JMS (Java Message Service) 规范概述 JMS 是一种与平台无关的消息服务标准,用于应用程序之间的消息传递。它提供了消息生产者/消费者模型,并且能够支持多种消息传递模式,包括点对点 (Point-to-Point, PTP) 和发布/订阅 (Publish/Subscribe, Pub/Sub)。 #### JMS 的基本构件 **1.1 连接工厂 (Connection Factory)** 连接工厂是创建连接的基础组件。例如,在ActiveMQ中,`ActiveMQConnectionFactory` 就是用来创建与ActiveMQ服务器建立连接的对象。 **1.1.2 连接 (Connection)** `JMSConnection` 对象封装了客户端与消息服务提供商之间的虚拟连接。连接是客户端与消息服务提供商交互的基础。 **1.1.3 会话 (Session)** `JMSSession` 是生产和消费消息的操作上下文。会话是单线程的,用于创建消息生产者、消息消费者以及消息本身。此外,会话还提供了一种事务性环境,在这个环境中,一系列消息的发送和接收被组合成一个原子操作。 **1.1.4 目的地 (Destination)** 目的地是用于指定消息目标或来源的对象。JMS 规范定义了两种消息传递域:点对点 (PTP) 和发布/订阅 (Pub/Sub)。 - **点对点**:每个消息只有一个消费者,生产者和消费者之间的时间相关性较弱。消息可以被存储,直到消费者准备接收。 - **发布/订阅**:每个消息可以有多个消费者,生产者和消费者之间存在时间相关性。订阅者只能消费从其订阅时刻起发布的新消息。JMS 支持持久订阅,即使订阅者不在线也能接收到消息。 **1.1.5 消息生产者 (Producer)** 消息生产者是由会话创建的对象,用于向特定目的地发送消息。 **1.1.6 消息消费者 (Consumer)** 消息消费者是由会话创建的对象,用于接收来自目的地的消息。消息消费有两种方式: - **同步消费**:通过调用 `Consumer.receive()` 方法从目的地提取消息。此方法可能阻塞直至消息到达。 - **异步消费**:为消费者注册一个消息监听器,以定义消息到达时执行的操作。 **1.1.7 消息 (Message)** JMS 消息由三部分组成: - **消息头**:每个消息都包含头信息,例如消息ID、目的地等。 - **消息属性**:用于存储额外的信息,如用户自定义的数据。 - **消息体**:根据消息类型的不同,消息体可以是文本、映射、字节流等形式。JMS 定义了五种消息类型:`TextMessage`、`MapMessage`、`BytesMessage`、`StreamMessage` 和 `ObjectMessage`。 #### JMS 的可靠性机制 **1.2.1 确认 (Acknowledgement)** 为了确保消息被成功消费,JMS 提供了确认机制。在事务性会话中,当事务提交时,确认自动发生。在非事务性会话中,确认的时机取决于创建会话时设置的确认模式: - **Session.AUTO_ACKNOWLEDGE**:当客户端成功从 `Consumer.receive()` 或 `MessageListener.onMessage()` 返回时,消息自动被确认。 - **Session.CLIENT_ACKNOWLEDGE**:客户端通过调用 `Message.acknowledge()` 显式确认消息。注意,一旦某个消息被确认,则所有已由当前会话消费的消息都将被确认。 - **Session.DUPS_ACKNOWLEDGE**:会话延迟确认消息。在这种模式下,如果消息服务提供商失败,则可能会出现重复消息。在这种情况下,消息头中的 `JMSRedelivered` 字段将被设置为 `true`。 **1.2.2 持久性 (Persistence)** JMS 支持两种消息提交模式: - **PERSISTENT**:指示消息服务提供商持久化存储消息,以防止因系统故障而导致消息丢失。 - **NON_PERSISTENT**:不要求消息持久化存储,性能更高但安全性较低。 **1.2.3 优先级 (Priority)** 消息优先级用于指示消息服务提供商优先处理紧急消息。优先级范围从0(最低)到9(最高),默认为4。需要注意的是,消息服务提供商不一定按优先级顺序处理消息。 **1.2.4 消息过期 (Expiration)** 可以为消息设置过期时间,超过该时间的消息将不再有效。如果不设置过期时间,默认情况下消息永远不会过期。 **1.2.5 临时目的地 (Temporary Destination)** 临时目的地是会话生命周期内存在的目的地,会话结束后自动销毁。可以通过 `Session.createTemporaryQueue()` 和 `Session.createTemporaryTopic()` 创建临时队列或主题。 JMS 规范提供了强大的消息通信框架,通过丰富的API支持不同的消息处理场景,使得开发者能够构建出高效、可靠的应用程序。
剩余44页未读,继续阅读
- 粉丝: 611
- 资源: 48
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助