注册核心

在之前的文章中,有说过Dubbo微服务框架,微服务中有一个关键环节就是注册核心.
注册核心的最终目标就是:服务发现(通过注册核心去发现其余服务)

为了实现该最终目标,注册核心中会生成注册表,注册表中记录的是服务的地址;客户端会依据注册表中的地址去调用服务.

分类

就像咱们在Dubbo微服务框架中所应用的zookeeper之外,还有很多风行应用的注册核心服务,如:
1)zookeeper(阿里等罕用) 2)eureka(springcloud举荐应用) 3)nacos 4)etcd...

所以像之前学习与应用Dubbo框架时,应用的是zookeeper注册核心;
在接下来的springcloud的学习与应用中,将去应用eureka注册核心.

eureka

简介

Eureka是Netflix开发的服务发现框架,自身是一个基于REST的服务,次要用于定位运行在AWS域中的中间层服务,以达到负载平衡和中间层服务故障转移的目标。SpringCloud将它集成在其子我的项目spring-cloud-netflix中,以实现SpringCloud的服务发现性能.

eureka运行机制

  1. 注册:服务提供者一次次重复尝试注册,直到注册核心中注册胜利为止;
  2. 拉取:消费者每隔30秒拉取一次注册表,去更新注册表;
  3. 心跳:服务提供者每隔30秒向eureka发送一次心跳,eureka若间断3次收不到心跳,会删除注册表中该服务地址;
  4. 自我爱护机制:

1).因为网络不稳固,15秒内,85%以上的服务器都呈现心跳异样(1次未收到心跳),就会触发自我爱护机制,爱护所有注册地址不被删除;
2).期待网络复原后,能够主动退出保护模式,恢复正常;
留神:开发测试期间会影响,能够先敞开自我保护模式

eureka和zookeeper区别

eureka:AP - 强调可用性/ 集群 - 对等构造
zookeeper:CP - 强调一致性/ 集群 - 主从构造

eureka组件

Eureka蕴含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息能够在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、应用轮询(round-robin)负载算法的负载均衡器。

搭建eureka服务器

增加eureka-server依赖

<?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>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.2.1.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>cn.tedu</groupId>    <artifactId>sp05-eureka</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>sp05-eureka</name>    <description>Demo project for Spring Boot</description>    <properties>        <java.version>1.8</java.version>        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>            <exclusions>                <exclusion>                    <groupId>org.junit.vintage</groupId>                    <artifactId>junit-vintage-engine</artifactId>                </exclusion>            </exclusions>        </dependency>    </dependencies>    <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>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

yml增加配置

application.yml中增加:

spring:  application:    name: eureka-server    server:  port: 2001  eureka:  #敞开保护模式  server:    enable-self-preservation: false   #host名  instance:    hostname: eureka1  client:    #不注册本身    register-with-eureka: false    #不拉取本身    fetch-registry: false

增加注解

在启动类上增加eureka注解@EnableEurekaserver,将我的项目作为springcloud注册核心(会触发主动配置)

批改hosts文件

批改hosts文件,增加yml中配置的eureka域名的映射:127.0.0.1 eureka1

服务提供者

增加eureka-client依赖

<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependencyManagement>    <dependencies>        <dependency>         <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-dependencies</artifactId>        <version>Hoxton.SR8</version>        <type>pom</type>        <scope>import</scope>        </dependency>     </dependencies></dependencyManagement>

yml配置eureka服务器地址

eureka:  client:    service-url:      defaultZone: http://eureka1:2001/eureka

增加注解

在启动类上增加注解@EnableDiscoveryClient
这一项为可选配置,也能够不写.