内容简介:在开发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处理剩下的事情。:)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 微服务实战问题
- 微服务实例自动弹性伸缩实践
- Spring Cloud微服务实战
- 大规模微服务实战经验
- 微服务实战——高可用的SpringCloudConfig
- Spring Cloud 微服务实战详细笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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(中文版)》 这本书的介绍吧!