SpringCloud实践分享-Eureka注册中心
2018-06-07 11:21
591 查看
随着业务需求增加,众多企业面临代码耦合严重、效率低下的问题。在Netflix开源了一套自己的微服务架构后,Spring随即也基于此推出SpringCloud。
目前来说,SpringCloud的门槛相对较低,在了解大致SpringCloud后即可上手,更多的是配置,或者是套路上的东西。当然我这么说只是对于希望快速上手的同学而言,源码博大精深,有兴趣可以多多研究。自己做微服务的也做了半年了,现在写一个demo,总结一下springcloud的基本用法,让我们的
微服务的小车先开起来。
spring-cloud-microservice代码
[]Eureka注册中心
[]Config配置中心
[]Oauth2认证中心
[]Zuul网关
[]api-admin服务
想启动一个Eureka服务注册中心,配置上也十分简单。首先在pom.xml中加入
注解
如果Eureka只希望standalone模式(只启动一个实例),事实上在配置文件application.yml无需配置内容,配置上基本信息以及端口即可。
如果希望启动HighAvailability模式(即启动多个实例),则可以参考一下配置。
在部署的时候,使用编译后同一个jar包,在启动后输入不同参数。例如使用命令
则启动配置spring.profiles为配置master下的内容。而最上面一块的内容为公共配置,启动master配置时,实际的配置时公共配置+master配置;如果有些配置
两边都有,则master配置会覆盖公共配置内容。
下面来说一个几个重点配置
Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
以上为Eureka配置相对重要的配置。
目前来说,SpringCloud的门槛相对较低,在了解大致SpringCloud后即可上手,更多的是配置,或者是套路上的东西。当然我这么说只是对于希望快速上手的同学而言,源码博大精深,有兴趣可以多多研究。自己做微服务的也做了半年了,现在写一个demo,总结一下springcloud的基本用法,让我们的
微服务的小车先开起来。
spring-cloud-microservice代码
项目构成
项目采用module的形式,一个项目下分多个module,导入项目比较方便。[]Eureka注册中心
[]Config配置中心
[]Oauth2认证中心
[]Zuul网关
[]api-admin服务
注册中心Eureka
Eureka作为服务的注册中心,服务间的互相调用都是通过Eureka来完成,所有的服务都将自己注册到eureka中。当A服务希望调用B服务时,A只需使用B的instanceId,而不是ip,即可完成调用。在分布式应用中,服务随机部署在各个服务器中,根据ip去调用服务极其低效,你再写代码。当服务启动多个实例时候,一般使用ribbon和feign,则会自动负载均衡,无需干预。想启动一个Eureka服务注册中心,配置上也十分简单。首先在pom.xml中加入
spring-cloud-starter-eureka-server依赖,再在入口类中加入
注解
@EnableEurekaServer即可。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
@EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
如果Eureka只希望standalone模式(只启动一个实例),事实上在配置文件application.yml无需配置内容,配置上基本信息以及端口即可。
如果希望启动HighAvailability模式(即启动多个实例),则可以参考一下配置。
在部署的时候,使用编译后同一个jar包,在启动后输入不同参数。例如使用命令
java -jar -Dspring.profiles.active=master your_jar_name.jar,
则启动配置spring.profiles为配置master下的内容。而最上面一块的内容为公共配置,启动master配置时,实际的配置时公共配置+master配置;如果有些配置
两边都有,则master配置会覆盖公共配置内容。
#公共配置 server: port: 8080 spring: application: name: eureka-server eureka: instance: lease-renewal-interval-in-seconds: 5 lease-expiration-duration-in-seconds: 5 prefer-ip-address: true client: register-with-eureka: true fetch-registry: true --- # 配置master spring: profiles: master eureka: instance: hostname: master client: service-url: defaultZone: http://master:8080/eureka/,http://backup1:8080/eureka/,http://backup2:8080/eureka/ --- # 配置backup1 spring: profiles: backup1 eureka: client: service-url: defaultZone: http://master:8080/eureka/,http://backup1:8080/eureka/,http://backup2:8080/eureka/ --- # 配置backup2 spring: profiles: backup2 eureka: client: service-url: defaultZone: http://master:8080/eureka/,http://backup1:8080/eureka/,http://backup2:8080/eureka/
下面来说一个几个重点配置
eureka.client.registry-fetch-interval-seconds表示服务间隔多久去Eureka中获取注册信息,默认为30s。
eureka.instance.lease-renewal-interval-in-seconds表示服务给Eureka发送心跳间隔,默认为30s。如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量。
eureka.instance.lease-expiration-duration-in-seconds表示Eureka上次收到服务的心跳后,等待下一次心跳的时间,如果超时则移除实例,默认为90s。
eureka.server.enable-self-preservation表示是否开启自我保护模式,默认为true。默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。
Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
eureka.server.eviction-interval-timer-in-ms表示Eureka清理无效节点的时间间隔,默认为60,000ms。
eureka.client.register-with-eureka表示是否将Eureka注册到自身,多实例中一边选择true。
eureka.client.fetch-registry表示是否拉去注册的服务。假设,服务A只注册到master节点的Eureka,但是开启该选项,所有的Eureka节点都会注册该服务。
eureka.client.defaultZone表示希望注册到Eureka的地址,格式为
http://ip:port/eureka/,如果部署环境有dns,也可以将ip换成域名,如果有是ha模式,配置多个地址用逗号隔开。
以上为Eureka配置相对重要的配置。
相关文章推荐
- SpringCloud | 注册中心Eureka(二)
- 【Spring Cloud】Eureka服务注册中心搭建
- 【微服务架构】SpringCloud之Eureka(注册中心集群篇)(三)
- 【Spring Cloud】Eureka服务注册中心搭建
- 【Spring Cloud】Eureka服务注册中心搭建
- 一起来学SpringCloud之 - 注册中心(Eureka/Consul)
- Spring Cloud(Dalston.SR5)--Eureka 注册中心搭建
- spring-cloud-eureka搭建注册中心(一)
- SpringCloud之高可用的服务注册中心(Eureka) |第八章 -yellowcong
- 【Spring Cloud】三、Eureka Consumer 服务注册中心消费者调用服务
- 【Spring Cloud】Eureka服务注册中心搭建
- 【Spring Cloud】Eureka服务注册中心搭建
- spring cloud eureka - 注册中心
- 【微服务架构】SpringCloud之Eureka(注册中心集群篇)(三)
- 学习笔记系列之SpringCloud | 第一章 服务注册中心(Eureka)
- SpringCloud之注册中心Eureka搭建-亲测好用
- spring-cloud系列 | eureka注册中心搭建
- 【Spring Cloud】Eureka服务注册中心搭建
- 【Spring Cloud】Eureka服务注册中心搭建
- Spring Cloud Eureka 入门 (一)服务注册中心详解 「Spring Cloud Eureka 入门系列」 Spring Cloud Eureka 入门 (一)服务注册中心详解 Spr