Spring Cloud下配置eureka.instance.instance-id使得服务实例在eureka界面增加显示版本号

     SpringCloud体系里的,服务实体向eureka注册时,注册名默认是“IP名:应用名:应用端口名”,即${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}。在eureka界面下显示如图:



      有些文章说默认的instance-id注册名是用机器主机名代替ip名,至少我在SpringCloud版本Dalston和Edgware下,无论eureka.instance.prefer-ip-address为true或者false,注册到eureka界面的都是以ip开头的,更高版本还没试过。

      那么如果我们想自定义服务在eureka上的实例名怎么弄呢?这个需求在服务多实例部署下很自然,因为多个实例下,可能不同的实例运行的是不同的版本,如果在eureka界面能看到每个实例运行的版本号,就更加方便问题的排查。尤其在开发和测试环境下,有些实例A运行的版本可能没有另外一些实例B运行版本的功能,但是ribbon又做了负载均衡,将对应这些功能的请求转发到A,就会造成错误的响应。如果eureka界面显示了版本号,那么我们就能先行定位问题的来源是不是版本的问题。

说了那么多,那么怎么给eureka界面上实例的显示名字加上版本号呢,或者说自定义格式。有如下步骤:

(1)要配置的属性为eureka.instance.instance-id。或者eureka.instance.instanceId也可以。好像目前SpringCloud对属性的中划线和驼峰型写法区分并不是很严。

(2)eureka.instance.instance-id必须写在application.properties或application.yml中。不能写在bootstrap.properties和bootstrap.yml中。可以去了解下springboot加载默认配置文件的顺序,bootstrap是在application之前的。写在bootstrap里的话,自定义的instance-id并不会在eureka界面生效,原理没研究过。

(3)取值如下,这里以写在application.properties为例:

eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${server.port}:@project.version@

这里注意project.version是引用maven里面的属性,因为springboot的parent包将maven中默认的${*}修改成了@*@,所以引用maven属性要用@@,而其他的比如server.port本来就是springboot的属性,直接${}。另一种方法可以参考博文http://blog.csdn.net/gj5266400/article/details/74914486 修改springboot对maven属性的引用符,统一为${}。

修改完后再次启动实例,eureka界面注册服务名已经加上了版本号:


  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值