SpringCloud系列四:Eureka-基本使用

一、新建Eureka注册中心工程microservicecloud-eureka-7001
1、引入依赖

<dependencies>
    <!--eureka-server服务端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
    <!-- 修改后立即生效,热部署 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

2、yml配置

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

3、在主启动类上添加@EnableEurekaServer注解

@SpringBootApplication
@EnableEurekaServer   //开启Eureka服务端,接受其它微服务注册进来
public class EurekaServer7001_App {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer7001_App.class,args);
    }
}

4、启动SpringBoot项目。http://localhost:7001/
在这里插入图片描述
二、将部门提供者microservicecloud-provider-dept-8001注册进eureka服务中心
1、引入依赖

<!-- eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

2、yml中配置

eureka:
  client:   #客户端注册进eureka服务列表内
    service-url: 
      defaultZone: http://localhost:7001/eureka    
  instance:
    instance-id: microservicecloud-dept8001   #自定义服务名称信息
    prefer-ip-address: true   #访问路径可以显示IP地址 

3、在主启动类上添加@EnableEurekaClient注解

@SpringBootApplication
@EnableEurekaClient   //开启Eureka服务端,服务启动后会自动注册进eureka服务中
public class DeptProvider8001_App {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider8001_App.class, args);
    }
}

4、先启动EurekaServer,再启动SpringBoot项目。http://localhost:7001/
在这里插入图片描述
注册到EurekaServer的服务名MICROSERVICECLOUD-DEPT就是yml中配置的。EurekaServer中服务名默认是大写的。

spring:
   application:
    name: microservicecloud-dept

三、info信息完善
1、引入依赖

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

2、修改父工程microservicecloud的pom.xml,添加构建build信息

<build>
    <finalName>microservicecloud</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <delimiters>
                    <delimit>$</delimit>
                </delimiters>
            </configuration>
        </plugin>
    </plugins>
</build>

3、yml中配置

info:
  app.name: atguigu-microservicecloud
  company.name: www.atguigu.com
  build.artifactId: ${project.artifactId}
  build.version: ${project.version}

4、测试
在这里插入图片描述
四、eureka自我保护
在这里插入图片描述
 默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
 在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。当它收到的心跳数重新恢复到阈值以上时,该Eureka Server节点就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。一句话讲解:好死不如赖活着。
 综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
 在Spring Cloud中,可以使用eureka.server.enable-self-preservation = false 禁用自我保护模式。
五、eureka服务发现
 对于注册进eureka的微服务,可以通过服务发现来获得该服务的信息。
1、修改部门提供者microservicecloud-provider-dept-8001。在DeptController中添加

@Autowired
private DiscoveryClient client;
 
@GetMapping(value = "/dept/discovery")
public Object discovery() {
    List<String> list = client.getServices();
    System.out.println("**********" + list);
    List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD-DEPT");
    for (ServiceInstance element : srvList) {
        System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
                + element.getUri());
    }
    return this.client;
}

2、在主启动类上添加@EnableEurekaServer注解

@SpringBootApplication
@EnableEurekaClient   //开启Eureka服务端,服务启动后会自动注册进eureka服务中
@EnableDiscoveryClient   //开启服务发现功能
public class DeptProvider8001_App {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider8001_App.class, args);
    }
}

3、修改部门消费者microservicecloud-consumer-dept-9001。在DeptController_Consumer中添加

//测试@EnableDiscoveryClient,消费端可以调用服务发现
@RequestMapping(value = "/consumer/dept/discovery")
public Object discovery() {
    return restTemplate.getForObject(REST_URL_PREFIX + "/dept/discovery", Object.class);
}

4、启动EurekaServer、启动提供者、再启动消费者。http://localhost:9001/consumer/dept/discovery
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lizhiqiang1217/article/details/89790439
今日推荐