如何用ClientID、TenantID与Secret配置Camel-Azure-ServiceBus XML连接
解决方案:用Azure AD凭据配置Camel Azure Service Bus组件
你遇到的401错误是因为构造的SAS连接字符串无效——你没有对应的SharedAccessKey,而ServiceBusConfiguration除了支持SAS连接字符串,还可以通过Azure AD服务主体凭据(ClientID、TenantID、Secret)完成认证,不需要SAS连接字符串。以下是纯XML配置方案:
1. 配置Azure AD服务主体凭据
创建ClientSecretCredential Bean,用于通过Azure AD生成认证令牌:
<bean id="clientSecretCredential" class="com.azure.identity.ClientSecretCredential"> <constructor-arg index="0"> <bean class="com.azure.identity.ClientSecretCredentialBuilder"> <property name="clientId" value="你的ClientID"/> <property name="tenantId" value="你的TenantID"/> <property name="clientSecret" value="你的Secret"/> <property name="authorityHost" value="https://login.microsoftonline.com/"/> </bean> </constructor-arg> </bean>
2. 配置ServiceBusClientBuilder
用上述凭据构建ServiceBus客户端的Builder,指定Service Bus命名空间:
<bean id="serviceBusClientBuilder" class="com.azure.messaging.servicebus.ServiceBusClientBuilder"> <property name="credential" ref="clientSecretCredential"/> <property name="fullyQualifiedNamespace" value="elexon-iris.servicebus.windows.net"/> </bean>
3. 修改Camel Azure Service Bus组件配置
移除原有的connectionString配置,改用上面的serviceBusClientBuilder:
<bean id="azureServiceBusComponent" class="org.apache.camel.component.azure.servicebus.ServiceBusComponent"> <property name="configuration"> <bean class="org.apache.camel.component.azure.servicebus.ServiceBusConfiguration"> <!-- 替换connectionString为serviceBusClientBuilder --> <property name="serviceBusClientBuilder" ref="serviceBusClientBuilder"/> <!-- 指定目标队列名称 --> <property name="entityName" value="iris.705d3ce1-xxxx-4fdf-acb3-xxxxxx"/> </bean> </property> </bean>
4. 保留原有路由和端点配置
你的路由和端点配置可保持不变,也可简化端点URI(已在配置中指定队列名称):
<endpoint id="azureQueueEndpoint" uri="azureServiceBusComponent:" /> <route id="Elexon_IRIS_Route"> <from uri="azureQueueEndpoint" /> <to uri="localAMQ:topic:IRIS-Elexon"/> </route>
注意事项
- 确保ActiveMQ的
lib目录下包含以下依赖包:azure-identity-x.x.x.jarazure-messaging-servicebus-x.x.x.jarazure-core-x.x.x.jar
- 确认你的Azure AD服务主体已被授予Azure Service Bus队列的读取权限(如
Azure Service Bus Data Receiver角色),否则仍会出现401错误。
内容的提问来源于stack exchange,提问作者user3788685
相关产品推荐
相关产品推荐

