Spring Cloud系列之Eureka使用详解(springcloud eureka原理和机制)

  本篇文章为你整理了Spring Cloud系列之Eureka使用详解(springcloud eureka原理和机制)的详细内容,包含有springcloud eureka配置详解 springcloud eureka原理和机制 springcloud eureka工作原理 spring cloud eureka启动报错 Spring Cloud系列之Eureka使用详解,希望能帮助你了解 Spring Cloud系列之Eureka使用详解。

  Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。Netflix完整的服务治理包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

  2.1父项目创建

  首先,创建一个Spring Cloud项目名为microservices,并在pom.xml中引入需要的依赖内容:

  

 ?xml version="1.0" encoding="UTF-8"? 

 

   project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"

   modelVersion 4.0.0 /modelVersion

   groupId com.zy /groupId

   artifactId microservices /artifactId

   version 0.0.1-SNAPSHOT /version

   packaging pom /packaging

   name microservices /name

   parent

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-parent /artifactId

   version 2.0.3.RELEASE /version

   relativePath/ !-- lookup parent from repository --

   /parent

  
project.build.sourceEncoding UTF-8 /project.build.sourceEncoding

   maven.compiler.encoding UTF-8 /maven.compiler.encoding

   spring-cloud.version Finchley.RELEASE /spring-cloud.version

   java.version 1.8 /java.version

   /properties

   !--开启springcloud支持--

   dependencyManagement

   dependencies

   dependency

   groupId org.springframework.cloud /groupId

   artifactId spring-cloud-dependencies /artifactId

   version ${spring-cloud.version} /version

   type pom /type

   scope import /scope

   /dependency

   /dependencies

   /dependencyManagement

  
packaging设置为pom表示该项目仅作为其他项目的聚合。

  dependencyManagement规定了子项目在使用其内部声明的依赖时不需要指定版本。

  modules用来声明所有格的子项目。

  2.2创建注册中心

  在microservices项目下新建一个名为eureka-service的module,建完之后,做以下改动:

  

 ?xml version="1.0" encoding="UTF-8"? 

 

   project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"

   modelVersion 4.0.0 /modelVersion

   groupId com.eureka /groupId

   artifactId eureka-service /artifactId

   version 0.0.1-SNAPSHOT /version

   name eureka-service /name

   packaging jar /packaging

   !--子项目依赖父项目--

   parent

   groupId com.zy /groupId

   artifactId microservices /artifactId

   version 0.0.1-SNAPSHOT /version

   /parent

  
groupId org.springframework.cloud /groupId

   artifactId spring-cloud-starter-netflix-eureka-server /artifactId

   /dependency

   /dependencies

   /project

  

 

  改完之后,回到父项目,将父项目的pom.xml修改为:

  

 !-- 在父工程添加子工程名称-- 

 

   modules

   module eureka-service /module

   /modules

  

 

  2.2.1开启注册功能

  eureka-service项目作为注册中心来使用,在eureka-service项目的启动类上增加注解@EnableEurekaServer,即开启注册中心功能。

  

@EnableEurekaServer

 

  @SpringBootApplication

  public class EurekaServiceApplication {

   public static void main(String[] args) {

   SpringApplication.run(EurekaServiceApplication.class, args);

  

 

  在开启注册功能后,该项目就变成了注册中心,但同时注册中心会把自己也当做客户端,如果不希望这样可以在配置中剔除,见下文。

  2.2.2配置解析

  eureka.server前缀的配置项

  

# 是否允许开启自我保护模式,缺省:true

 

  # 当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端

  #一般生产环境是开启的,防止网络原因导致被注册中心剔除,调试环境关闭

  eureka.server.enable-self-preservation = false

  # Peer节点更新间隔,单位:毫秒

  eureka.server.peer-eureka-nodes-update-interval-ms =

  # Eureka服务器清理无效节点的时间间隔,单位:毫秒,缺省:60000,即60秒

  eureka.server.eviction-interval-timer-in-ms = 60000

  

 

  eureka.instance前缀的配置项

  

# 服务名,默认取 spring.application.name 配置值,如果没有则为 unknown

 

  eureka.instance.appname = eureka-client

  # 实例ID

  eureka.instance.instance-id = eureka-client-instance1

  # 应用实例主机名

  eureka.instance.hostname = localhost

  # 客户端在注册时使用自己的IP而不是主机名,缺省:false

  eureka.instance.prefer-ip-address = false

  # 应用实例IP

  eureka.instance.ip-address = 127.0.0.1

  # 服务失效时间,失效的服务将被剔除。单位:秒,默认:90

  eureka.instance.lease-expiration-duration-in-seconds = 90

  # 服务续约(心跳)频率,单位:秒,缺省30

  eureka.instance.lease-renewal-interval-in-seconds = 30

  # 状态页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/info

  eureka.instance.status-page-url-path = /info

  # 健康检查页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/health

  eureka.instance.health-check-url-path = /health

  

 

  eureka.client前缀

  

# Eureka服务器的地址,类型为HashMap,缺省的Key为 defaultZone;缺省的Value为 http://localhost:8761/eureka

 

  # 如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。

  eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

  # 是否向注册中心注册自己,缺省:true

  # 一般情况下,Eureka服务端是不需要再注册自己的

  eureka.client.register-with-eureka = true

  # 是否从Eureka获取注册信息,缺省:true

  # 一般情况下,Eureka服务端是不需要的

  eureka.client.fetch-registry = true

  # 客户端拉取服务注册信息间隔,单位:秒,缺省:30

  eureka.client.registry-fetch-interval-seconds = 30

  # 是否启用客户端健康检查

  eureka.client.health-check.enabled = true

  eureka.client.eureka-service-url-poll-interval-seconds = 60

  # 连接Eureka服务器的超时时间,单位:秒,缺省:5

  eureka.client.eureka-server-connect-timeout-seconds = 5

  # 从Eureka服务器读取信息的超时时间,单位:秒,缺省:8

  eureka.client.eureka-server-read-timeout-seconds = 8

  # 获取实例时是否只保留状态为 UP 的实例,缺省:true

  eureka.client.filter-only-up-instances = true

  # Eureka服务端连接空闲时的关闭时间,单位:秒,缺省:30

  eureka.client.eureka-connection-idle-timeout-seconds = 30

  # 从Eureka客户端到所有Eureka服务端的连接总数,缺省:200

  eureka.client.eureka-server-total-connections = 200

  # 从Eureka客户端到每个Eureka服务主机的连接总数,缺省:50

  eureka.client.eureka-server-total-connections-per-host = 50

  

 

  2.2.3配置说明

  spring.application.name和eureka.instance.appname

  同时配置时,eureka.instance.appname优先级更高。

  如果没有配置eureka.instance.appname,则使用spring.application.name的值,如果连spring.application.name都没有配置,则取unknown。

  该配置项对应Eureka界面下图红框的内容:

  eureka.instance.instance-id

  配置项eureka.instance.instance-id的值决定了下图右侧红框中的显示内容:

  如果没有设置eureka.instance.instance-id,那么显示的值将是一个由Eureka自动判断生成的编号:

  eureka.instance.prefer-ip-address、eureka.instance.hostname、eureka.instance.ip-address

  在eureka.instance.prefer-ip-address = true时,实例优先使用eureka.instance.ip-address的值进行注册,如果没有配置eureka.instance.ip-address,则使用第一个非回环IP地址进行注册。

  此时,我们打开Eureka的界面,在实例上右键,复制链接地址;或将鼠标放在下图右上方的链接上(不点击),就可以获取实例的地址,如下图左下角,可见此时实例注册的是IP:

  而当eureka.instance.prefer-ip-address = false时,同样的方式可以查看实例注册地址采用了主机名eureka.instance.hostname的值:

  2.2.4最终配置

  

server:

 

   port: 7000

  spring:

   application:

   name: enreka-server

  eureka:

   server:

   #生产环境一般开启,防止网络原因导致的服务被踢掉

   enable-self-preservation: false #当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端。false表示注册中心能及时删除下线服务

   instance:

   hostname: eureka1 #实例主机名

   prefer-ip-address: false #

   health-check-url-path: /health

   status-page-url: /info

   client:

   register-with-eureka: true # 向注册中心注册自己

   fetch-registry: true # 获取注册中心的注册过的服务,此选项为true时一般配合register-with-eureka: true 实现eureka的高可用集群

   service-url:

   # 注册地址,将当前服务注册到此地址的注册中心中

   defaultZone: http://eureka2:7001/eureka/

  

 

  2.3创建服务提供者

  新建一个名为account-service的Spring Cloud项目,并修改pom.xml文件:

  

 ?xml version="1.0" encoding="UTF-8"? 

 

   project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"

   modelVersion 4.0.0 /modelVersion

   groupId com.account /groupId

   artifactId account-service /artifactId

   version 0.0.1-SNAPSHOT /version

   name account-service /name

   description Demo project for Spring Boot /description

   packaging jar /packaging

   parent

   groupId com.zy /groupId

   artifactId microservices /artifactId

   version 0.0.1-SNAPSHOT /version

   /parent

   dependencies

   !--作为enreka的客户端,--

   dependency

   groupId org.springframework.cloud /groupId

   artifactId spring-cloud-starter-netflix-eureka-client /artifactId

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   /dependency

   !--监控支持--

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-actuator /artifactId

   /dependency

   /dependencies

   /project

  

 

  为当前项目的启动类增加@EnableDiscoveryClient注解:

  

@SpringBootApplication

 

  @EnableDiscoveryClient//开启服务发现,也可以使用@EnableEurekaClient,该@EnableDiscoveryClient注解更通用,可以替换为其他注册中心

  public class AccountServiceApplication {

   public static void main(String[] args) {

   SpringApplication.run(AccountServiceApplication.class, args);

  

 

  还需要配置一下当前项目的eureka:

  

eureka:

 

   instance:

   prefer-ip-address: true

   client:

   register-with-eureka: true #将自己注册到eureka中

   fetch-registry: true #实时从eureka获取注册成功的服务

   service-url:

   # 注册中心的地址,多个地址使用逗号隔开

   defaultZone: http://localhost:7000/eureka/

  

 

  2.4启动项目

  分别启动eureka的注册中心和服务提供者。启动后可以发现服务提供者可以正常在eureka显示:

  3Eureka集群

  在实际生产环境中,eureka作为服务的注册发现中心,承担着至关重要的作用,所以需要多点集群部署,下面介绍这种方式。

  3.1注册中心集群搭建

  在eureka中,集群采用多个注册中心相互注册的方式。首先第一个注册中心实例的application.yml配置文件如下:

  

server:

 

   port: 7000

  spring:

   application:

   name: enreka-server

  eureka:

   server:

   #生产环境一般开启,防止网络原因导致的服务被踢掉

   enable-self-preservation: false #当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端。false表示注册中心能及时删除下线服务

   instance:

   hostname: eureka1 #实例主机名

   prefer-ip-address: false #

   instance-id: service-1

   client:

   register-with-eureka: true # 向注册中心注册自己

   fetch-registry: true # 获取注册中心的注册过的服务,此选项为true时一般配合register-with-eureka: true 实现eureka的高可用集群

   service-url:

   # 注册地址,将当前服务注册到此地址的注册中心中

   defaultZone: http://eureka2:7001/eureka/

  

 

  第二个注册中心实例的application.yml配置文件如下:

  

server:

 

   port: 7001

  spring:

   application:

   name: enreka-server

  eureka:

   server:

   #生产环境一般开启,防止网络原因导致的服务被踢掉

   enable-self-preservation: false #当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端。false表示注册中心能及时删除下线服务

   instance:

   hostname: eureka2 #实例主机名

   prefer-ip-address: false #

   instance-id: service-2

   client:

   register-with-eureka: true # 向注册中心注册自己

   fetch-registry: true # 获取注册中心的注册过的服务,此选项为true时一般配合register-with-eureka: true 实现eureka的高可用集群

   service-url:

   # 注册地址,将当前服务注册到此地址的注册中心中

   defaultZone: http://eureka1:7000/eureka/

  

 

  需要注意的点如下:

  
搭建eureka集群时需要使用不同的IP或不同域名,当IP相同时认为不是集群,所以这里采用不同域名进行模拟。其中域名eureka1和eureka2是在Hosts文件中手动配置的:

  

127.0.0.1 eureka1

 

  127.0.0.1 eureka2

  

 

  实际生产时,ip肯定是不相同的,所以可以直接使用IP方式进行集群

  
register-with-eureka和fetch-registry同时设置为true,表示向注册中心注册自己。这样集群才能感应到

  以上就是Spring Cloud系列之Eureka使用详解(springcloud eureka原理和机制)的详细内容,想要了解更多 Spring Cloud系列之Eureka使用详解的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: