你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 Java 消息服务 2.0 API 与 Azure 服务总线高级版配合使用
本文介绍如何使用热门的 Java 消息服务 (JMS) 2.0 API 通过高级消息队列协议 (AMQP) 1.0 协议与 Azure 服务总结交互。
注意
仅高级层支持 Java 消息服务 (JMS) 2.0 API。>
先决条件
服务总线入门
此指南假定已有服务总线命名空间。 如果没有,则请使用 Azure 门户创建命名空间和队列。 若要详细了解如何创建服务总线命名空间和队列,请参阅通过 Azure 门户开始使用服务总线队列。
设置 Java 开发环境
若要开发 Java 应用程序,需要设置适当的开发环境 -
- 安装 JDK(Java 开发工具包)或 JRE (Java Runtime Environment)。
- 在生成路径和适当的系统变量中添加 JDK 或 JRE。
- 安装 Java IDE 以利用 JDK 或 JRE。 例如 Eclipse 或 IntelliJ。
若要详细了解如何在 Azure 上准备适用于 Java 的开发人员环境,请使用本指南。
支持哪些 JMS 功能?
下表列出了 Azure 服务总线当前支持的 Java 消息服务 (JMS) 功能。 它还展示了不支持的功能。
功能 | API | 状态 |
---|---|---|
队列 |
|
支持 |
主题 |
|
支持 |
临时队列 |
|
支持 |
临时主题 |
|
支持 |
消息生成者/ JMSProducer |
|
支持 |
队列浏览器 |
|
支持 |
消息使用者/ JMSConsumer |
目前不支持 noLocal |
支持 |
共享持久订阅 |
|
支持 |
非共享持久订阅 |
目前不支持 noLocal,应将其设置为 false |
支持 |
共享非持久订阅 |
|
支持 |
非共享非持久订阅 |
目前不支持 noLocal,应将其设置为 false |
支持 |
消息选择器 | 取决于创建的使用者 | 支持 |
交付延迟(计划的消息) |
|
支持 |
创建的消息 |
|
支持 |
跨实体事务 |
|
支持 |
分布式事务 | 不支持 |
下载 Java 消息服务 (JMS) 客户端库
若要利用高级层中提供的所有功能,请将以下库添加到项目的生成路径:azure-servicebus-jms。 此包提供一些必要的默认值,例如预提取策略值、重新连接策略、Microsoft Entra ID 和现成的托管标识支持。
注意
若要将 Azure-servicebus-jms 添加到生成路径,请使用项目的首选依赖项管理工具,如 Maven 或 Gradle。
为 Java 应用程序编码
导入依赖项后,可以采用独立于 JMS 提供程序的方式编写 Java 应用程序。
使用 JMS 连接到 Azure 服务总线
若要使用 JMS 客户端与 Azure 服务总线连接,需要连接字符串,该字符串在 Azure 门户中“共享访问策略”中的“主连接字符串”下提供 。
实例化
ServiceBusJmsConnectionFactorySettings
ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings(); connFactorySettings.setConnectionIdleTimeoutMS(20000);
使用相应的
ServiceBusConnectionString
实例化ServiceBusJmsConnectionFactory
。String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>"; ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
使用
ConnectionFactory
创建Connection
,然后创建Session
Connection connection = factory.createConnection(); Session session = connection.createSession();
或者创建
JMSContext
(用于 JMS 2.0 客户端)JMSContext jmsContext = factory.createContext();
重要
虽然 JMS“会话”和服务总线“会话”的名称相似,但它们完全不相关。
在 JMS 1.1 中,会话是允许创建
MessageProducer
、MessageConsumer
和Message
本身的 API 的基本构建基块。 有关详细信息,请参阅 JMS API 编程模型在服务总线中,会话是对队列和订阅实现 FIFO 处理的服务和客户端构造。
编写 JMS 应用程序
Session
或 JMSContext
经过实例化后,对于管理和数据这两方面的操作,应用程序都可以使用熟悉的 JMS API 来执行。 请参阅支持的 JMS 功能的列表,以了解哪些 API 受支持。 下面是一些用于开始使用 JMS 的示例代码片段 -
将消息发送到队列和主题
// Create the queue and topic
Queue queue = jmsContext.createQueue("basicQueue");
Topic topic = jmsContext.createTopic("basicTopic");
// Create the message
Message msg = jmsContext.createMessage();
// Create the JMS message producer
JMSProducer producer = jmsContext.createProducer();
// send the message to the queue
producer.send(queue, msg);
// send the message to the topic
producer.send(topic, msg);
从队列接收消息
// Create the queue
Queue queue = jmsContext.createQueue("basicQueue");
// Create the message consumer
JMSConsumer consumer = jmsContext.createConsumer(queue);
// Receive the message
Message msg = (Message) consumer.receive();
从针对某主题的共享持久订阅接收消息
// Create the topic
Topic topic = jmsContext.createTopic("basicTopic");
// Create a shared durable subscriber on the topic
JMSConsumer sharedDurableConsumer = jmsContext.createSharedDurableConsumer(topic, "sharedDurableConsumer");
// Receive the message
Message msg = (Message) sharedDurableConsumer.receive();
“摘要”
本指南展示了 Java 客户端应用程序如何使用 Java 消息服务 (JMS) 通过 AMQP 1.0 实现与 Azure 服务总线交互。
也可以通过其他语言(包括 .NET、C、Python 和 PHP)使用 Service Bus AMQP 1.0。 使用这些不同语言构建的组件可以使用服务总线中的 AMQP 1.0 支持可靠且完全无损地交换消息。