Eureka Instance-Id不符合Stacksaga要求,启动报错如何解决?
解决启动user-service时的InstanceIdNotValidException异常
错误信息
启动user-service时抛出InstanceIdNotValidException异常:
The eureka Instance-Id is not valid for Stacksaga. [instanceId : user-service:a07a498249971cfa6de45fe1cdbeb670]
完整堆栈信息:
org.stacksaga.exception.InstanceIdNotValidException: The eureka Instance-Id is not valid for Stacksaga. [instanceId : user-service:a07a498249971cfa6de45fe1cdbeb670] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) at com.example.userservice.UserServiceApplication.main(UserServiceApplication.java:12)
问题原因
Stacksaga对Eureka实例ID的格式有强制校验,默认生成的实例ID(服务名:随机字符串)不符合其要求。Stacksaga要求实例ID必须包含能唯一标识服务实例的网络信息(如IP地址+端口),而非仅用随机串。
解决方法
自定义Eureka实例ID格式,确保包含IP和端口信息:
方式一:application.yml配置
eureka: instance: instance-id: ${spring.cloud.client.ip-address}:${server.port}
方式二:application.properties配置
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
配置完成后重启服务,实例ID会变为[IP地址]:[端口号]的格式,符合Stacksaga的校验规则,即可正常启动。
内容的提问来源于stack exchange,提问作者Mafei
相关产品推荐
相关产品推荐

