Spring Cloud 学习(二)Eureka服务注册与发现

Eureka服务注册中心搭建

新建module

Spring Cloud 学习(二)Eureka服务注册与发现_第1张图片

修改pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
        
        <dependency>
            <groupId>com.yu.springcloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
    dependencies>

创建application.yml

server:
  port: 7001

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: localhost
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: true
    #false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

创建主启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class, args);
    }
}

启动测试

Spring Cloud 学习(二)Eureka服务注册与发现_第2张图片

将上一篇搭建好的服务提供者和消费者注册到eureka中

修改cloud-provider-payment8001的pom.xml

 		
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>

修改yml

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

修改主启动类

Spring Cloud 学习(二)Eureka服务注册与发现_第3张图片

cloud-consumer-order80与cloud-provider-payment8001同理,不多写了

测试页面

image-20201031170140756

Eureka集群搭建

新建cloud-eureka-server7002

Spring Cloud 学习(二)Eureka服务注册与发现_第4张图片

  1. 改pom(从cloud-eureka-server7001的pom复制)

  2. C:\Windows\System32\drivers\etc路径下的hosts文件添加

    127.0.0.1  eureka7001.com
    127.0.0.1  eureka7002.com
    

修改yml(7001)

server:
  port: 7001

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: eureka7001.com
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7002.com:7002/eureka/

修改yml(7002)

server:
  port: 7001

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: eureka7002.com
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka/

将7001的主启动类复制到7002

将提供者微服务和消费者微服务注册到两台eureka中(yml)

Spring Cloud 学习(二)Eureka服务注册与发现_第5张图片

测试

  1. 启动两台eureka
  2. 启动提供者
  3. 启动消费者

Spring Cloud 学习(二)Eureka服务注册与发现_第6张图片

提供者8001集群环境搭建(8001,8002)

参考cloud-provider-payment8001来新建cloud-provider-payment8002,修改cloud-provider-payment8002的yml的端口为8002

修改8001和8002的controller

Spring Cloud 学习(二)Eureka服务注册与发现_第7张图片

现在已经有两个提供者了,需要修改消费者的访问地址

Spring Cloud 学习(二)Eureka服务注册与发现_第8张图片

已经有两个提供者(payment)了,现在需要使用@LoadBalanced注解赋予RestTemplate负载均衡

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

测试

  1. 启动eureka集群
  2. 启动提供者集群
  3. 启动消费者

最终会8001和8002接口交替调用,实现了负载均衡,搭建成功

关于eureka自我保护

**概述:**默认情况下,如果EurekaServer在- 定时间内没有接收到某 个微服务实例的心跳,EurekaServer将 会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了一因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过 “自我保护模式”来解决这个问题一-当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。如果在Eureka Server首页看到下面这段提示,则说明Eureka进入了保护模式。image-20201110134740313

如何配置禁止自我保护:

eureka:
  server:
    enable-self-preservation: false

你可能感兴趣的:(Spring,Cloud,eureka,spring,cloud)