SpringCloud —— Eureka 集群

前文

微服务(一)SpringCloud 简介

微服务(二)SpringCloud 版本选型

微服务(三)SpringCloud 工程构建

SpringCloud —— Eureka 注册中心

Eureka 集群说明

先来看下单机版的 Eureka
在这里插入图片描述
服务注册:将服务信息注册进注册中心
服务发现:从注册中心上获取服务信息
实质:存 key 服务命令,取 key 调用地址


  • 先启动 Eureka 注册中心
  • 启动服务提供者
  • 服务启动后会把自身信息(比如服务地址以别名的方式注册进 Eureka)
  • 消费者服务在需要调用接口时,使用服务别名去注册中心获取实际的 RPC 远程调用地址
  • 消费者或得调用地址后,底层实际是利用 HttpClient 技术实现远程调用
  • 消费者获得服务地址后会缓存在本地 JVM 内存中,默认每间隔 30 s 更新一次服务调用地址

问题:微服务 RPC 远程服务调用最核心的是什么?

高可用,比如说注册中心只有 only one,那么当这个注册中心出现故障了,会导致整个服务环境不可用

所以需要搭建 Eureka 注册中心集群,实现负载均衡 + 故障容错

单机版的 Eureka 配置

在介绍集群的 Eureka 之前,先来看下单机版的

server:
  port: 7001

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

单机版的 hostname 默认是 localhost,但是当有两台 Eureka 的时候,hostname 就不能写 localhost 了

Eureka 集群

在这里插入图片描述

修改 hosts 文件

打开 C:\Windows\System32\drivers\etc 路径,修改 etc 下的 hosts 文件,增加以下内容
在这里插入图片描述

新建 Module(7001)

在这里插入图片描述

添加依赖

<dependencies>
   <!--eureka-server-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!--boot web actuator-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--一般通用配置-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

编写 application.yml 文件

注意:这里不能像单机版那样写了,应该 相互注册

server:
  port: 7001

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

这个是 7001 端口的 EurekaServer,注册的地址是 7002 的

编写启动类

package com.java.springcloud;

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

/**
 * @author Woo_home
 * @create 2020/3/25 11:33
 */

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

新建 Module(7002)

在这里插入图片描述

添加依赖

<dependencies>
   <!--eureka-server-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!--boot web actuator-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--一般通用配置-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

编写 application.yml 文件

server:
  port: 7002

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

这个是 7001 端口的 EurekaServer,注册的地址是 7001 的

编写启动类

package com.java.springcloud;

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

/**
 * @author Woo_home
 * @create 2020/3/25 12:46
 */

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

测试

先后启动 7001,7002 项目
在这里插入图片描述
在这里插入图片描述
访问 http://localhost:7001/,可以发现 7001 指向的是 7002
在这里插入图片描述
访问 http://localhost:7002/,可以发现 7002 指向的是 7001
在这里插入图片描述
而且还可以通过域名访问,如:
在这里插入图片描述
在这里插入图片描述
这样,简单的 Eureka 集群就搭建好了

发布了227 篇原创文章 · 获赞 1032 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/Woo_home/article/details/105092265