eureka.instance.appname 与 spring.application.name 有何区别?

本文深入探讨了Spring Cloud中Eureka与Zuul的配置冲突问题,详细分析了spring.application.name与eureka.instance.appname在服务注册与路由中的优先级和实际作用,通过修改配置成功解决了路由失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果使用spring-cloud做过微服务项目的应该都知道,spring-cloud-netflix 提供了一整套解决微服务架构的组件。比如zuul、eureka等等。而且zuul、eureka的配置也挺多的。那么今天就说一下我在使用中我遇到的一个问题。

一开始我的项目是使用 spring.application.name=auth来配置我的服务名的。后来改为eureka.instance.appname=auth,发现竟然路由失败,报的错误就是找不到服务名为AUTH的服务。如下:
在这里插入图片描述然后就百度了一下,发现都说是spring.application.name的优先级比 eureka.instance.appname的高。源码在 EurekaInstanceConfigBean 中是这样写的:

@Override
	public void setEnvironment(Environment environment) {
		this.environment = environment;
		// set some defaults from the environment, but allow the defaults to use relaxed binding
		String springAppName = this.environment.getProperty("spring.application.name", "");
		if(StringUtils.hasText(springAppName)) {
			setAppname(springAppName); //注意这句话
			setVirtualHostName(springAppName);
			setSecureVirtualHostName(springAppName);
		}
	}

看起来好像是 appname 被置为了spring.application.name配置的值。但这并不没有解决我的问题。我的问题是现在配置了eureka.instance.appname=auth,为什么也没有起作用,如果只是优先级问题,那么应该是起作用的。跟进一下源码才发现秘密如下:

在这里插入图片描述正如图所示:这里spring.application.name=unknown,而eureka.instance.appname的确是对的。也就是说其实zuul路由的时候指定的 serviceId 其实就是spring.application.name,而不是eureka.instance.appname。而且spring.application.name并不能覆盖eureka.instance.appname

好了,测试一下。将 配置改为如下:

spring.application.name=gateway1
eureka.instance.appname=gateway2

路由规则改为zuul.routes.GATEWAY1=/gateway1/**
在这里插入图片描述测试通过,成功的路由过去了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值