Spring Boot连接Kafka时出现java.lang.NoSuchFieldError: CLIENT_ENDPOINT错误
Spring Boot连接Kafka时出现AWS STS版本冲突错误
错误日志
2024-02-21T14:02:03.419Z INFO 1 --- [customer-master-service] [ main] [ ] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer-customer-master-service-kafka-group-6, groupId=customer-master-service-kafka-group] Subscribed to topic(s): CAS_CUSTOMER_UPDATE 2024-02-21T14:02:03.461Z INFO 1 --- [customer-master-service] [ main] [ ] tomerMasterServiceApplicationApplication : Started CustomerMasterServiceApplicationApplication in 22.136 seconds (process running for 23.454) 2024-02-21T14:02:04.282Z ERROR 1 --- [customer-master-service] [ntainer#0-0-C-1] [ ] o.s.k.l.KafkaMessageListenerContainer : Stopping container due to an Error 2024-02-21T14:02:04.285170248Z java.lang.NoSuchFieldError: CLIENT_ENDPOINT at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.executeAssumeRoleWithWebIdentity(AWSSecurityTokenServiceClient.java:994) ~[aws-java-sdk-sts-1.11.986.jar!/:na] 2024-02-21T14:02:04.285184208Z at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRoleWithWebIdentity(AWSSecurityTokenServiceClient.java:976) ~[aws-java-sdk-sts-1.11.986.jar!/:na] at com.amazonaws.auth.STSAssumeRoleWithWebIdentitySessionCredentialsProvider.newSession(STSAssumeRoleWithWebIdentitySessionCredentialsProvider.java:149) ~[aws-java-sdk-sts-1.11.986.jar!/:na] at com.amazonaws.auth.STSAssumeRoleWithWebIdentitySessionCredentialsProvider.access$000(STSAssumeRoleWithWebIdentitySessionCredentialsProvider.java:40) ~[aws-java-sdk-sts-1.11.986.jar!/:na] at com.amazonaws.auth.STSAssumeRoleWithWebIdentitySessionCredentialsProvider$1.call(STSAssumeRoleWithWebIdentitySessionCredentialsProvider.java:65) ~[aws-java-sdk-sts-1.11.986.jar!/:na]
问题原因
该错误由AWS SDK模块版本不兼容导致:aws-java-sdk-sts模块尝试调用的CLIENT_ENDPOINT字段,在依赖的AWS核心模块(如aws-java-sdk-core)中不存在,说明两者版本不一致。
解决方案
- 统一AWS SDK版本:确保所有
aws-java-sdk-*开头的依赖使用完全相同的版本,比如将aws-java-sdk-sts和aws-java-sdk-core都指定为1.11.986或同一新版本。 - 排查并排除依赖冲突:
- 用依赖分析工具查看依赖树:Maven执行
mvn dependency:tree,Gradle执行gradle dependencies,找出引入不同版本AWS SDK的依赖项。 - 对冲突依赖进行排除,例如在pom.xml中排除旧版本的核心模块:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sts</artifactId> <version>1.11.986</version> <exclusions> <exclusion> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> </exclusion> </exclusions> </dependency>
- 用依赖分析工具查看依赖树:Maven执行
- 迁移到AWS SDK v2:考虑升级到AWS SDK for Java 2.x,它采用模块化设计,依赖管理更严谨,能从根源避免这类版本冲突问题。
内容的提问来源于stack exchange,提问作者harsh agarwal
相关产品推荐
相关产品推荐

