0
点赞
收藏
分享

微信扫一扫

SpringCloud使用Eureka作为服务治理中心


SpringCloud使用Eureka作为服务治理中心

前言

我们在进行开发分布式架构的系统时,有一个不可或缺的工具那就是服务治理组件,我们可以通过它来实现服务的注册、发布和调用,可以理解为它维护着我们所有服务的花名册。目前主流的服务治理中心有​​Zookeeper​​​、​​Eureka​​​、​​Nacos​​​等,本篇博客这里我想和大家介绍一下服务治理组件—​​Eureka​​的原理和使用。

Nacos的使用可以参考我的博客:​​Nacos服务治理中心和配置中心​​

正文

Eureka

Eureka是一项基于​​REST​​​的服务,主要在​​AWS​​云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。它是微服务框架中最核心和最基础的模块,它主要用来实现微服务实例的自动化注册与发现。

Eureka由2个部分组成:服务端发现组件 和 客户端发现组件:

  • 客户端通过注解的方式嵌入程序中,服务器和客户端之间会进行周期性心跳检测 ,如果心跳不存在时,该服务节点会从服务注册表中移除。并且我们要知道​​Eureka​​​的心跳检测是基于​​SpringBoot Actuator​​来实现的
  • 各个服务节点 通过注册中心得注册信息以​​Rest​​方式来实现调用。

SpringCloud使用Eureka作为服务治理中心_spring cloud

Eureka的三种角色:服务注册中心、服务提供者、服务消费者,事实上一个结点既可以是服务提供者 、也可以是服务消费者。

SpringCloud使用Eureka作为服务治理中心_eureka_02


微服务节点之间通过续约和续期地方式实现服务清单的一致性:

  • 续约:​​Eureka Client​​​会周期(默认30秒)地向​​Eureka Server​​发送心跳以续约(Renew)自己的信息。
  • 续期:​​Eureka Server​​​会定期(默认60秒)执行一次失效服务检测功能,它一会检查超过一定时间(默认是60秒)没有续约的​​Eureka Client​​,发现并注销该节点。

SpringCloud使用Eureka作为服务治理中心

Eureka Server 的搭建

Maven依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>


<dependencies>
<!--除去springboot自带的日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>


<!-- log4j -->
<!--添加log4j2的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

<!--spring boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

</dependencies>


<!--加入Spring Cloud 的Dalston版本的配置依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

application.properties:配置文件

server.port=8761

###eureka配置
eureka.instance.hostname=localhost
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=80
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
eureka.server.enable-self-preservation=false

各配置项说明:

  • eureka.instance.hostname :应用实例主机名,一般结合​​linux​​​的​​hostname​​中配置映射关系。
  • eureka.client.registry-fetch-interval-seconds:表示​​eureka client​​​间隔多久去拉取服务注册信息,默认为30秒,对于​​api-gateway​​,如果要迅速获取服务注册状态,可以缩小该值,比如5秒
  • eureka.instance.lease-expiration-duration-in-seconds:表示​​eureka server​​​至上一次收到​​client​​​的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该​​instance​​。
  • eureka.client.register-with-eureka:禁止自己当做服务注册,当单节点​​eureka server​​​时选择​​false​​。
  • eureka.client.fetch-registry:表示是否从​​eureka server​​​获取注册的服务信息,当单节点​​eureka server​​​时选择​​false​​。
  • eureka.client.service-url.defaultZone:​​eureka​​服务器的地址,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。
  • eureka.server.enable-self-preservation:是否允许开启自我保护模式,缺省:​​true​​​,当​​eureka​​​服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端。在开发调试过程中选择​​false​​,避免客户端节点重新启动后无法被刷新。

SpringCloudGovernanceApp:启动类

@Slf4j
@EnableEurekaServer //这个注解实现服务器端
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringCloudGovernanceApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCloudGovernanceApp.class);
}
/**
* 项目的启动方法
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringCloudGovernanceApp.class, args);
log.info("======服务已经启动========");
}
}

验证

启动项目后:访问​​Eureka​​​的控制台 ​​http://127.0.0.1:8761/​​

SpringCloud使用Eureka作为服务治理中心_微服务_03

Eureka Client的搭建

Maven依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>

<dependencies>
<!--除去springboot自带的日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- log4j -->
<!--添加log4j2的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>


<!--spring boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>


<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>


</dependencies>

<!--加入Spring Cloud 的Dalston版本的配置依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

application.properties:配置文件

server.port=8080
spring.application.name=springcloud-demo-producer

#eureka
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/
eureka.client.availability-zones.localhost=http://localhost:8761/eureka/,http://localhost:8762/eureka/
eureka.client.registry-fetch-interval-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=80
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.prefer-ip-address=true

各配置项说明:

  • eureka.client.service-url.defaultZone:​​eureka​​服务器的地址,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。
  • eureka.client.availability-zones.localhost:在多机房的时候启动,比如服务A调用服务B,可以实现A服务优先访问同机房的服务B,避免跨机房影响访问时间。
  • eureka.client.registry-fetch-interval-seconds:表示​​eureka client​​​间隔多久去拉取服务注册信息,默认为30秒,对于​​api-gateway​​,如果要迅速获取服务注册状态,可以缩小该值,比如5秒。
  • eureka.instance.lease-expiration-duration-in-seconds:表示​​eureka server​​​至上一次收到​​client​​​的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该​​instance​​。
  • eureka.instance.lease-renewal-interval-in-seconds:表示​​eureka client​​发送心跳给server端的频率。
  • eureka.instance.prefer-ip-address:就可以将IP注册到​​eureka server​​上,而如果不配置就是机器的主机名。这样可以实现通过公网实现服务调用。

SpringCloudProducerApp:启动类

@Slf4j
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class},scanBasePackages = "com.luo")
@EnableDiscoveryClient
@EnableEurekaClient
@EnableCircuitBreaker
public class SpringCloudProducerApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCloudProducerApp.class);
}
/**
* 项目的启动方法
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringCloudProducerApp.class, args);
log.info("======服务已经启动========");
}
}

验证

启动项目后:刷新​​Eureka​​​的控制台 ​​http://127.0.0.1:8761/​​

SpringCloud使用Eureka作为服务治理中心_spring_04

SpringCloud使用Eureka作为服务治理中心_微服务_05


举报

相关推荐

0 条评论