spring cloud中的实例命名规则

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取 2000+ 道 Java 面试题

springboot实例的默认命名
SpringCloud体系里的,服务实体向eureka注册时,注册名默认是“IP名:应用名:应用端口名”,即spring.cloud.client.ipAddress: s p r i n g . c l o u d . c l i e n t . i p A d d r e s s : {spring.application.name}:{spring.application.instance_id: {spring.application.instance_id: {server.port}}。

有些文章说默认的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: s p r i n g . c l o u d . c l i e n t . i p A d d r e s s : {spring.application.name}:server.port:@project.version@这里注意project.version是引用maven里面的属性,因为springboot的parent包将maven中默认的 s e r v e r . p o r t : @ p r o j e c t . v e r s i o n @ 这 里 注 意 p r o j e c t . v e r s i o n 是 引 用 m a v e n 里 面 的 属 性 , 因 为 s p r i n g b o o t 的 p a r e n t 包 将 m a v e n 中 默 认 的 {*}修改成了@*@,所以引用maven属性要用@@,而其他的比如server.port本来就是springboot的属性,直接${}。另一种方法可以参考博文http://blog.csdn.net/gj5266400/article/details/74914486 修改springboot对maven属性的引用符,统一为${}。

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


来源:http://ddrv.cn/a/88268

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » spring cloud中的实例命名规则

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏