消息队列RabbitMQ版提供JMS库供JMS客户端接入消息队列RabbitMQ版。本文介绍消息队列RabbitMQ版JMS库的相关概念、获取方式、使用限制和使用教程。

背景信息

JMS是一种消息传递标准,允许基于Java EE(Java平台企业版)的应用程序组件创建、发送、接收、读取消息。JMS使分布式应用能够以松耦合、可靠、异步的方式进行通信。消息队列RabbitMQ版JMS库支持JMS 1.1

消息队列RabbitMQ版JMS库

消息队列RabbitMQ版JMS库是消息队列RabbitMQ版提供的JMS接口。JMS应用只需变更少量代码,即可通过该接口接入消息队列RabbitMQ版,将消息队列RabbitMQ版作为JMS Provider。您可以使用消息队列RabbitMQ版JMS库创建JMS Connection、JMS Session、JMS Producer和JMS Consumer。

如需了解JMS和AMQP的概念和差异,请参见AMQP和JMS差异

获取方式

消息队列RabbitMQ版JMS库的获取方式如下:

  • 在Maven项目的pom.xml文件中添加以下依赖。
    <dependency>
        <groupId>com.alibaba.mq-amqp.jms</groupId>
        <artifactId>mq-amqp-jms-client</artifactId>
        <version>1.11.2-1.0.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.rabbitmq</groupId>
                <artifactId>amqp-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  • 下载依赖的JAR文件

使用限制

消息队列RabbitMQ版JMS库的使用限制如下:

  • 不支持服务器会话。
  • 未实现XA事务接口。
  • 支持Topic选择器,未实现Queue选择器。
  • 支持SSL和socket选项,但只能使用消息队列RabbitMQ版JMS客户端提供的默认SSL连接协议。
  • 不支持JMS NoLocal订阅。NoLocal订阅可以防止订阅者从自己的连接发布消息。您可以调用包含NoLocal参数的方法,但是调用会被忽略。

如需了解消息队列RabbitMQ版JMS库接口实现情况,请参见JMS接口兼容性

使用教程

消息队列RabbitMQ版JMS库的使用教程如下:

项目 描述 文档
P2P JMS P2P(点对点)消息收发模式具有以下特点:
  • 一条消息被一个指定的接收者消费。某个发送者向某个Queue(队列)发送消息后,某个指定的接收者从该Queue接收消息。
  • 发布者和订阅者之间不存在时间依赖性。发送者向Queue发送消息时不需要接收者同时处于活跃状态,接收者从Queue接收消息时同样不需发送者处于活跃状态。
Pub/Sub JMS Pub/Sub消息收发模式具有以下特点:
  • 一条消息可以被多个订阅者消费。当某个发布者向某个Topic(消息主题)发布某条消息后,订阅了该Topic的所有订阅者都可以消费该条消息。
  • 发布者和订阅者之间存在时间依赖性。
    • 如果订阅者创建的是非持久订阅,则订阅者必须在发布者向Topic发布消息前订阅Topic,且在订阅后必须始终保持活跃状态,才能从订阅的Topic消费全部的消息。在订阅者处于非活跃状态时发布的消息不会在订阅者重新处于活跃状态时被消费。
    • 如果订阅者创建的是持久订阅,则订阅者必须在发布者向Topic发布消息前订阅Topic,但在订阅后不必始终保持活跃状态,也能从订阅的Topic消费全部的消息。在订阅者处于非活跃状态时发布的消息会在订阅者重新处于活跃状态时被消费。