使用用户托管标识从Azure函数发送Event Grid事件遇类找不到异常
问题:使用用户托管身份向Azure EventGrid发送数据时抛出ClassNotFoundException异常
尝试使用UserManagedIdentity Credential向Azure EventGrid发送数据时,抛出ClassNotFoundException: com.azure.core.util.tracing.TracerProvider异常。
相关代码
import com.azure.identity.ManagedIdentityCredentialBuilder; import com.azure.messaging.eventgrid.EventGridEvent; import com.azure.messaging.eventgrid.EventGridPublisherClient; import com.azure.messaging.eventgrid.EventGridPublisherClientBuilder; import com.azure.core.credential.TokenCredential; TokenCredential managedIdentityCredentialUserAssigned = new ManagedIdentityCredentialBuilder().clientId(System.getenv("MANAGED_IDENTITY_CLIENT_ID")).build(); EventGridPublisherClient<EventGridEvent> eventGridEventClient = new EventGridPublisherClientBuilder() .endpoint(System.getenv("EVENTGRID_SYNC_TOPIC_ENDPOINT")).credential(managedIdentityCredentialUserAssigned).buildEventGridEventPublisherClient();
异常栈信息
Exception: ClassNotFoundException: com.azure.core.util.tracing.TracerProvider Caused by: java.lang.NoClassDefFoundError: com/azure/core/util/tracing/TracerProvider at com.azure.messaging.eventgrid.EventGridPublisherClientBuilder.buildAsyncClient(EventGridPublisherClientBuilder.java:204) at com.azure.messaging.eventgrid.EventGridPublisherClientBuilder.buildClient(EventGridPublisherClientBuilder.java:232) at com.azure.messaging.eventgrid.EventGridPublisherClientBuilder.buildEventGridEventPublisherClient(EventGridPublisherClientBuilder.java:393) at com.cie.poc.managed.identity.function.service.ManagedIdentityEventGridService.sendEvent(ManagedIdentityEventGridService.java:39) at com.cie.poc.managed.identity.function.SaveDataToBlob.apply(SaveDataToBlob.java:56) at com.cie.poc.managed.identity.function.SaveDataToBlob.apply(SaveDataToBlob.java:22) at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.invokeFunctionAndEnrichResultIfNecessary(SimpleFunctionRegistry.java:897) at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.invokeFunction(SimpleFunctionRegistry.java:853) at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.doApply(SimpleFunctionRegistry.java:708) at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.apply(SimpleFunctionRegistry.java:551) at org.springframework.cloud.function.adapter.azure.FunctionInvoker.handleRequest(FunctionInvoker.java:129) at com.cie.poc.managed.identity.function.SaveDataToBlobHandler.run(SaveDataToBlobHandler.java:32) ... 18 more Caused by: java.lang.ClassNotFoundException: com.azure.core.util.tracing.TracerProvider at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 30 more
依赖配置(pom.xml)
<dependency> <groupId>com.azure</groupId> <artifactId>azure-messaging-eventgrid</artifactId> <version>4.18.0</version> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-eventgrid</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-core</artifactId> <version>1.35.0</version> </dependency>
环境信息
- Spring Boot版本:2.7.8
- Java版本:11
解决方案
- 移除冲突的旧版EventGrid依赖:
com.microsoft.azure:azure-eventgrid:1.1.0是Azure EventGrid的旧版SDK,和新版com.azure:azure-messaging-eventgrid存在依赖冲突,直接删除该依赖。 - 修正azure-core版本不匹配问题:
azure-messaging-eventgrid:4.18.0要求的azure-core最低版本为1.47.0,当前手动指定的1.35.0版本过低。可以选择:- 删除手动指定的
azure-core依赖,让Maven自动根据azure-messaging-eventgrid的依赖关系引入正确版本; - 手动将
azure-core版本升级到1.47.0或更高(建议使用与azure-messaging-eventgrid兼容的最新稳定版)。
- 删除手动指定的
- 可选:统一Azure SDK版本:使用Azure BOM(Bill of Materials)统一管理所有Azure SDK依赖的版本,避免版本不匹配问题,在pom.xml中添加:
添加后无需给单个Azure SDK依赖指定版本,BOM会自动引入兼容版本。<dependencyManagement> <dependencies> <dependency> <groupId>com.azure</groupId> <artifactId>azure-sdk-bom</artifactId> <version>2024.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
内容的提问来源于stack exchange,提问作者Nandishwar Garg
相关产品推荐
相关产品推荐

