SpringCloud——高可用EurekaServer应该这样编写

高可用Eureka Server

构建一个双节点Eureka Server集群

Eureka Server

  • 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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lanh</groupId>
    <artifactId>eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <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</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  • 启动类
package com.lanh.eureka;

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

}

方法一

  1. 配置系统的hosts,Windows系统的hosts文件路径是C:\Windows\System32\drivers\etc\hosts;Linux及MacOS等系统的文件路径是/etc/hosts。
    127.0.0.1 peer1 peer2
    
  2. 将application.yml修改如下,让两个节点的Eureka Server相互注册。
server:
# 设置 Eureka Server WEB 控制台端口、服务注册发现端口。Eureka Server 服务注册 发现端口默认为 8761。
    port: 8761
spring:
    application:
    # 设置 spring 应用命名,默认为 null。同命名的应用会注册到同一个服务集群中。
        name: eureka1
    # 指定profile=peer1
    profiles: peer1

eureka:
    client:
        service-url:
            # 将自己注册到peer2这个Eureka上面去
            defaultZone: http://peer2:8762/eureka/
    instance:
        hostname: peer1
        
---

server:
    # 设置 Eureka Server WEB 控制台端口、服务注册发现端口。Eureka Server 服务注册 发现端口默认为 8761。
    port: 8762
spring:
    application:
        # 设置 spring 应用命名,默认为 null。同命名的应用会注册到同一个服务集群中。
        name: eureka2
    # 指定profile=peer2
    profiles: peer2

eureka:
    client:
        service-url:
            # 将自己注册到peer2这个Eureka上面去
            defaultZone: http://peer1:8761/eureka/
    instance:
        hostname: peer2

如上,使用连字符(—)将该application.yml文件分为三段。第二段和第三段分别为spring.properties指定了一个值,该值表示它所在的那段内容应用在哪个Profile里。第一段由于并未指定spring.profiles,因此这段内容会对所有Profile生效。
经过以上分析,不难理解,我们定义了peer1和peer2这两个Profile。当应用以peer1这个Profile启动时,配置该EurekaServer的主机名为peer1,并将其注册到http://peer2:8762/eureka/ ;反之,当应用以profile=peer2时,EurekaServer会注册到peer1节点的Eureka Server。

测试

  • 打包项目,并使用以下命令启动两个Eureka Server节点
    在这里插入图片描述
    jar名称根据自己的项目名进行修改

通过spring.profiles.active指定使用哪个profile启动。

  • 启动后:
    访问http://peer1:8761 ,会发现“registered-replicas”中已有peer2节点;同理,访问http://peer2:8762 ,也能发现其中的“registered-replicas”有peer1节点
    在这里插入图片描述
    在这里插入图片描述

方法二

不知道你们觉得打包成jar包麻不麻烦,我觉得挺麻烦的,虽然在正常开发的时候确实是这样,但是我们现在是在学习,有一个这么好的Idea摆在我们面前,为什么要用命令窗口去启动测试它呢?所以我的做法是,在idea中并行执行程序:
在这里插入图片描述
接下来,填入下面给出的application.yml第一个代码块,启动程序,然后再把application.yml全部替换成第二个代码块,启动,即可出现上面的结果。

注意:两次启动间隔要尽量小,不然就会导致连接不成功,建议:提前复制好第二个代码块,启动完第一次,马上修改yml文件,迅速启动第二次

  1. 配置系统的hosts,Windows系统的hosts文件路径是C:\Windows\System32\drivers\etc\hosts;Linux及MacOS等系统的文件路径是/etc/hosts。
    127.0.0.1 peer1 peer2
    
  2. 下面有两个application.yml
  • application.yml
server:
# 设置 Eureka Server WEB 控制台端口、服务注册发现端口。Eureka Server 服务注册 发现端口默认为 8761。
    port: 8761
spring:
    application:
    # 设置 spring 应用命名,默认为 null。同命名的应用会注册到同一个服务集群中。
        name: cloud-eureka
eureka:
    client:
        # 是否将自己注册到 Eureka-Server 中,默认的为 true
        register-with-eureka: false
        # 是否从 Eureka-Server 中获取服务注册信息,默认为 true
        fetch-registry: false
        service-url:
            defaultZone: http://localhost:8761/eureka/
server:
# 设置 Eureka Server WEB 控制台端口、服务注册发现端口。Eureka Server 服务注册 发现端口默认为 8761。
    port: 8762
spring:
    application:
        # 设置 spring 应用命名,默认为 null。同命名的应用会注册到同一个服务集群中。
        name: eureka2

eureka:
    client:
        service-url:
            # 将自己注册到peer2这个Eureka上面去
            defaultZone: http://peer1:8761/eureka/
    instance:
        hostname: peer2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿豆蛙给生活加点甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值