如何在Spring Boot 2.5.0(JDK17)中用Java代码创建Azure Service Bus主题订阅并列出已有订阅
Azure Service Bus 订阅管理的Java实现(Spring Boot 2.5.0)
推荐依赖
针对你的Spring Boot 2.5.0 + JDK17环境,推荐使用Azure Spring Cloud Starter for Service Bus,它已整合底层Azure Service Bus客户端库,能很好适配Spring Boot生态。如果需要更灵活调用管理API,也可以直接引入底层客户端库(starter已包含,无需重复引入)。
Maven依赖配置:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>azure-spring-cloud-starter-servicebus</artifactId> <version>3.10.0</version> <!-- 与Spring Boot 2.5.0兼容 --> </dependency>
核心代码实现
使用ServiceBusAdministrationClient可完成订阅的创建与查询操作,以下是封装好的管理类:
首先在application.properties中配置Service Bus连接字符串:
azure.servicebus.connection-string=Endpoint=sb://<你的命名空间>.servicebus.windows.net/;SharedAccessKeyName=<密钥名称>;SharedAccessKey=<密钥值>
然后编写管理类:
import com.azure.messaging.servicebus.administration.ServiceBusAdministrationClient; import com.azure.messaging.servicebus.administration.ServiceBusAdministrationClientBuilder; import com.azure.messaging.servicebus.administration.models.CreateSubscriptionOptions; import com.azure.messaging.servicebus.administration.models.SubscriptionProperties; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.List; @Component public class ServiceBusSubscriptionManager { private final ServiceBusAdministrationClient adminClient; public ServiceBusSubscriptionManager(@Value("${azure.servicebus.connection-string}") String connectionString) { this.adminClient = new ServiceBusAdministrationClientBuilder() .connectionString(connectionString) .buildClient(); } // 创建主题订阅,支持配置订阅属性 public void createTopicSubscription(String topicName, String subscriptionName) { CreateSubscriptionOptions options = new CreateSubscriptionOptions(); // 可选配置:设置消息默认过期时间为1小时 options.setDefaultMessageTimeToLive(java.time.Duration.ofHours(1)); if (!adminClient.doesSubscriptionExist(topicName, subscriptionName)) { adminClient.createSubscription(topicName, subscriptionName, options); System.out.printf("订阅 %s 已成功创建在主题 %s 下%n", subscriptionName, topicName); } else { System.out.printf("主题 %s 下已存在订阅 %s%n", topicName, subscriptionName); } } // 列出指定主题下的所有订阅 public List<SubscriptionProperties> listTopicSubscriptions(String topicName) { return adminClient.listSubscriptions(topicName).stream().toList(); } // 示例执行方法 public void runDemo() { String targetTopic = "your-topic-name"; String newSubName = "new-demo-subscription"; // 创建订阅 createTopicSubscription(targetTopic, newSubName); // 查询并打印所有订阅 List<SubscriptionProperties> subscriptions = listTopicSubscriptions(targetTopic); System.out.printf("主题 %s 下的所有订阅:%n", targetTopic); subscriptions.forEach(sub -> System.out.println("- " + sub.getSubscriptionName())); } }
关键说明
ServiceBusAdministrationClient是Azure官方提供的管理客户端,专门用于Service Bus资源的创建、查询、删除等管理操作,区别于负责消息收发的ServiceBusSenderClient/ServiceBusReceiverClient。- 创建订阅时可通过
CreateSubscriptionOptions配置更多特性,比如会话支持、死信规则、自动删除过期订阅等,根据业务需求调整即可。 - 调用
listSubscriptions会返回订阅的完整属性,包括创建时间、过期策略、过滤规则等,可按需提取所需信息。
内容的提问来源于stack exchange,提问作者Joe1988
相关产品推荐
相关产品推荐

