使用Netflix Eureka注册多个本地微服务实例

栏目: Java · 发布时间: 5年前

内容简介:在开发Spring Boot + Spring Cloud微服务时,我们通常会在本地运行它们,同时运行Spring Cloud Config Server和Spring Cloud Netflix Eureka的本地实例。为我们的微服务开发提供必要的脚手架,并更密切地复制我们的测试和生产环境。很多时候,我们只是运行一个正在开发的微服务的单个实例,我们几乎不费力地工作:只要通过内部属性(通常在项目的application.properties/.yml配置文件中)为服务提供所需的端口号(如server.po

在开发Spring Boot + Spring Cloud微服务时,我们通常会在本地运行它们,同时运行Spring Cloud Config Server和Spring Cloud Netflix Eureka的本地实例。为我们的微服务开发提供必要的脚手架,并更密切地复制我们的测试和生产环境。

很多时候,我们只是运行一个正在开发的微服务的单个实例,我们几乎不费力地工作:只要通过内部属性(通常在项目的application.properties/.yml配置文件中)为服务提供所需的端口号(如server.port=8080),或将应用程序指向我们的本地Spring Cloud Config Server。但是当您想要运行所述微服务的多个实例并将其注册到Eureka以便它们可以访问微服务时会发生什么?

首先,Spring Cloud Netflix Eureka的一些背景知识:

Eureka是一个服务注册中心,为全局关键分布式系统提供服务注册和发现功能。服务注册表为微服务提供了一种观察和看到的方式,消费微服务可以轻松找到“支持服务”,其他微服务提供消费服务使用的功能。当一个微服务失败/脱机/无法访问时,另一个微快速启动以在不同的位置替换它。服务注册表使微服务实例可以轻松地找到彼此,无论他们在哪个时间点。

在我们的开发机器上本地运行,当一个微服务实例联系Eureka希望自己注册时,Eureka将应用程序的IP地址与它正在侦听的端口号相结合,为该微服务实例创建一个唯一的标识符/定位器。手动更改我们的微服务实例将运行的指定端口(如果启动多个实例)是繁琐的。相反,我们可以通过设置server.port=0其属性来简单地将0指定为我们的微服务的目标端口; 这样做会导致 Spring Boot为我们运行的每个实例分配一个随机可用的端口号

但是有一个问题!我们的微服务实例尝试在此端口分配之前向Eureka注册其存在,从而导致使用本地IP地址和端口号零(0)进行注册,该微服务的每个后续实例也是如此。这有效地限制了我们运行我们希望向本地Eureka实例注册的任何本地微服务的单个实例。幸运的是,有一个简单的解决方法:动态地为每个实例分配一个唯一的instance-id供Eureka使用。

这是一个Github项目 ,我演示如何使用咖啡服务(还有什么?)和Spring Cloud的最新快照(目前是Finchley.BUILD-SNAPSHOT)来实现这一目标。我已将以下值添加到从Config Server提供给每个coffee-service实例的属性文件中:

server:  
  port: ${PORT:0}

eureka:  
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}

注意:我通常更喜欢将YAML文件用于属性,但也可以将它们(在.properties文件中)表示为直接属性赋值,如下所示:

server.port=${PORT:0}

eureka.instance.instance-id=${spring.application.name}:${spring.application.instance_id:${random.value}}  

第一行分配给server.port变量PORT的值(如果存在); 如果没有,则为0.这会提示Spring Boot分配一个随机的未使用端口。

第二行将当前spring.application.instance_id(如果存在)追加到spring.application.name冒号(:)分隔。如果spring.application.instance_id不存在,则它会附加一个随机值,以便为此实例创建唯一的Eureka实例标识符。

要在IntelliJ IDEA 启动coffee-service 两个实例,我们必须从编辑窗口右上角的下拉菜单中选择“编辑配置...”.在“运行/调试配置”窗口中,我们必须取消选中“仅单实例”复选框,这将在每次运行应用程序时创建一个新的微服务实例,而不是停止现有实例并重新启动它。

现在当我们运行我们的多个实例时coffee-service,我们会看到这些条目出现在我们的Eureka服务日志中.

总结

在本地运行微服务的多个实例 - 并使用Eureka注册它们以实现可发现性 - 只需几个小的配置设置就可以了。使用当前的Spring Cloud快照构建(例如,在这些示例中为Finchley.BUILD-SNAPSHOT)并将设置server.port为0,并将微服务eureka.instance.instance-id设置为唯一的生成字符串:或者动态分配;或者在实例初始化时分配。Spring Cloud Netflix Eureka处理剩下的事情。:)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First Servlets & JSP(中文版)

Head First Servlets & JSP(中文版)

(美)巴萨姆、(美)塞若、(美)贝茨 / 苏钰函、林剑 / 中国电力出版社 / 2006-10 / 98.00元

《Head First Servlets·JSP》(中文版)结合SCWCD考试大纲讲述了关于如何编写servlets和JSP代码,如何使用JSP表达式语言,如何部署Web应用,如何开发定制标记,以及会话状态、包装器、过滤器、企业设计模式等方面的知识,以一种轻松、幽默而又形象的方式让你了解、掌握servlets和JSP,并将其运用到你的项目中去。《Head First Servlets·JSP》(中......一起来看看 《Head First Servlets & JSP(中文版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具