Eureka 服务注册中心

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012946310/article/details/82319369

本项目只是服务注册和发现中心的一个模块,完整项目整合请参考:https://blog.csdn.net/u012946310/article/details/81913874

项目结构:
这里写图片描述
这里 Eureka 服务注册中心提供了两个,分别是springcloud_eureka6110 和 6011,Eureka Server可以通过多个实例相互注册的方式实现高可用,它们之间会互相同步信息保持所有节点数据一致,下面直接上代码:
1,springcloud_eureka6110 项目代码:
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>springcloud_eureka6110</groupId>
    <artifactId>springcloud_eureka6110</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springcloud_eureka6110</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <artifactId>springcloud_demo</artifactId>
        <groupId>springcloud_demo</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</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>
        </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>
        <finalName>6110</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

EurekaApplication6110 启动类:

package springcloud.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer  //启动一个服务注册中心提供给其他应用进行对话
@SpringBootApplication
public class EurekaApplication6110 {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication6110.class, args);
    }

}

application.properties 配置文件:

server.port=6110

spring.application=eureka-server-6110
#将 enreka 服务注册到其他enreka服务上面去,实现enreka高可用
eureka.client.serviceUrl.defaultZone=http://192.168.2.131:6111/eureka/
#是否向服务注册中心注册自己
eureka.client.registerWithEureka=false
#是否检索服务
eureka.client.fetchRegistry=false

2,springcloud_eureka6111 项目代码:
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>springcloud_eureka6111</groupId>
    <artifactId>springcloud_eureka6111</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springcloud_eureka6111</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <artifactId>springcloud_demo</artifactId>
        <groupId>springcloud_demo</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</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>
        </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>
        <finalName>6111</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

EurekaApplication6111 启动类代码:

package springcloud.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer  //启动一个服务注册中心提供给其他应用进行对话
@SpringBootApplication
public class EurekaApplication6111 {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication6111.class, args);
    }

}

application.properties 配置文件:

server.port=6111

spring.application=eureka-server-6111
#将 enreka 服务注册到其他enreka服务上面去,实现enreka高可用
eureka.client.serviceUrl.defaultZone=http://192.168.2.126:6110/eureka/
#是否向服务注册中心注册自己
eureka.client.registerWithEureka=false
#是否检索服务
eureka.client.fetchRegistry=false

3,说明:
以上项目 EurekaApplication6110 和 EurekaApplication6111 代码基本一致,不同之处:

server.port=xxx // 端口号,6010 和 6011
spring.application=xxx // 项目名称
eureka.client.serviceUrl.defaultZone=xxx // 服务注册中心,将两个 eureka 服务进行相互注册
pom.xml // pom 文件里面 的groupId 和 springcloud_eureka6111 有些许不同

以上为几处不同,自己稍微修改就可以了

4,项目演示:
两个项目都配置好之后我们就可以启动项目了,由于我启动了两台虚拟主机,所以注册的 ip 地址会不一样,如果单机版本的话修改相应ip地址即可,如果需要注册到多台 eureka 服务上面的话

eureka.client.serviceUrl.defaultZone=xxx,xxx

后面的 eureka 服务以,分割即可,注意,号之前不要有空格。
此时启动两个 eureka 服务并且访问上面配置中的两个 eureka 服务
http://192.168.2.126:6110

http://192.168.2.131:6111
这里写图片描述
会出现 eureka 界面展示控制台,并且发现 126:6110 与 131:6111 两个 eureka 服务之间实现了相互的注册。

Eureka 自我保护机制:
这里写图片描述
Eureka 的自我保护模式是有意义的,该模式被激活后,它不会从注册列表中剔除因长时间没收到心跳导致租期过期的服务,而是等待修复,直到心跳恢复正常之后,它自动退出自我保护模式。这种模式旨在避免因网络分区故障导致服务不可用的问题。例如,两个客户端实例 C1 和 C2 的连通性是良好的,但是由于网络故障,C2 未能及时向 Eureka 发送心跳续约,这时候 Eureka 不能简单的将 C2 从注册表中剔除。因为如果剔除了,C1 就无法从 Eureka 服务器中获取 C2 注册的服务,但是这时候 C2 服务是可用的。

所以,Eureka 的自我保护模式最好还是开启它。
到此 Eureka 服务注册中心的高可用就配置完毕了。

猜你喜欢

转载自blog.csdn.net/u012946310/article/details/82319369