You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用spring-cloud-azure-starter-servicebus连接Azure Service Bus遇订阅为空错误

问题:Spring Cloud Azure Service Bus 启动报错 "Subscription cannot be null"

背景信息

尝试使用spring-cloud-azure-starter-servicebus连接Azure Service Bus Topic,配置了订阅名但启动时提示订阅不能为空。相关配置与代码如下:

POM依赖

<properties>
    <java.version>17</java.version>
    <spring-cloud-azure.version>5.9.1</spring-cloud-azure.version>
    <spring-cloud.version>2023.0.0</spring-cloud.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Azure Service bus -->
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-servicebus</artifactId>
    </dependency>

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-messaging-servicebus</artifactId>
        <version>7.15.0</version>
    </dependency>
</dependencies>

Java配置类

@Configuration(proxyBeanMethods = false)
@Slf4j
public class ProcessorClientConfiguration {
    @Bean
    ServiceBusRecordMessageListener processMessage() {
        return context -> {
            ServiceBusReceivedMessage message = context.getMessage();
            log.info("Processing message. Id: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(),
                    message.getSequenceNumber(), message.getBody());
        };
    }

    @Bean
    ServiceBusErrorHandler processError() {
        return context -> {
            log.error("Error when receiving messages from namespace: '%s'. Entity: '%s'%n",
                    context.getFullyQualifiedNamespace(), context.getEntityPath());
        };
    }
}

application.properties配置

spring.cloud.azure.servicebus.namespace=Endpoint=sb://sbns-...
spring.cloud.azure.servicebus.entity-name=data-preprod
spring.cloud.azure.servicebus.processor.subscription-name=data-preprod
spring.cloud.azure.servicebus.entity-type=topic

错误日志

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.azure.messaging.servicebus.ServiceBusClientBuilder$ServiceBusReceiverClientBuilder]: Factory method 'serviceBusReceiverClientBuilder' threw exception with message: Subscription cannot be null.
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:177) ~[spring-beans-6.1.3.jar!/:6.1.3]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:647) ~[spring-beans-6.1.3.jar!/:6.1.3]
    ... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: Subscription cannot be null.

解决方案

1. 修正配置项名称

在Spring Cloud Azure 5.x版本中,Topic订阅名的正确配置项应为spring.cloud.azure.servicebus.subscription-name,而非spring.cloud.azure.servicebus.processor.subscription-name。修改application.properties:

spring.cloud.azure.servicebus.namespace=Endpoint=sb://sbns-...
spring.cloud.azure.servicebus.entity-name=data-preprod
spring.cloud.azure.servicebus.subscription-name=data-preprod
spring.cloud.azure.servicebus.entity-type=topic

2. 移除重复依赖

spring-cloud-azure-starter-servicebus已经包含了azure-messaging-servicebus,无需单独引入,否则可能导致版本冲突。删除POM中的以下依赖:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-messaging-servicebus</artifactId>
    <version>7.15.0</version>
</dependency>

3. 确认Azure资源配置

确保Azure Service Bus中已创建名为data-preprod的Topic,且该Topic下存在名为data-preprod的订阅。如果订阅不存在,需先在Azure Portal中创建对应订阅。

验证修改

完成上述调整后,重新启动应用,应该能正常初始化Service Bus Processor客户端,不再出现"Subscription cannot be null"的错误。

内容的提问来源于stack exchange,提问作者user3222372

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:43:10