# 150. 商品详情页动态渲染系统:Spring Cloud 之 Eureka 注册中心

温馨提示

本课程的 spring cloud 教程基本上是官网文档里面的教程, 所以如果觉得稍显吃力可以参考 慕课 Spring Cloud 微服务实战笔记 (opens new window)

# 什么是注册中心?

  1. 首先有一个 eureka server,服务的注册与发现的中心
  2. 可以将你写好的服务注册到 eureka server 上去
  3. 别人如果需要调用你的服务,就可以才能够 eureka server 上查找你的服务所在地址,然后调用

# eureka 基本原理

  1. 服务都会注册到 eureka 的注册表
  2. eureka 有心跳机制,自动检测服务,故障时自动从注册表中摘除
  3. 每个服务也会缓存 eureka 的注册表,及时 eureka server 挂掉,每个服务也可以基于本地注册表与其他服务进行通信
  4. 如果 eureka server 如果挂掉了,就无法发布新的服务了

# 搭建项目说明

本次练习项目放在 https://github.com/zq99299/cache-eshop.git 上,关于配置请参考该项目

使用工具或相关版本如下:

  • gradle v4.8.1
  • spring boot v2.1.6.RELEASE
  • spring cloud vGreenwich.SR2"
  • idea 开发

项目结构:

// 由于是微服务,所以暂时把所有的项目放在该仓库下,并上传到 git
// 如果后续有特殊情况,一定要分仓库才能实现的话,会特殊说明在本地仓库进行试验
|- cache-eshop : 仓库,只做最基础的通用配置
  |- cache-eureka-server : 本课要搭建分服务注册中心
1
2
3
4

特别说明:关于 cloud 的使用,请首先参考官网资料 (opens new window), 大部分的课程讲解都很基础,在官网上就已经有相关教程了

# eureka-server

eshop-eureka-server/build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'
ext {
    set('springCloudVersion', "Greenwich.SR2")
}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

application.yml

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
1
2
3
4
5
6
7
8
9
10
11

EshopEurekaServerApplication

package com.mrcode.cache.eshop.eshopeurekaserver;

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

@SpringBootApplication
@EnableEurekaServer
public class EshopEurekaServerApplication {

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

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

启动之后,访问地址:http://localhost:8761/ 能看到管理界面就算可以了。

# eureka-client

eshop-eurela-client/build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

ext {
    set('springCloudVersion', "Greenwich.SR2")
}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

application.yml

server:
  port: 9000

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
1
2
3
4
5
6
7

EshopEurelaClientApplication

package cn.mrcode.cache.eshop.eshopeurelaclient;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class EshopEurelaClientApplication {

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

    @Value("${server.port}")
    private int port;

    @RequestMapping("/")
    public String home() {
        return "Hello world port " + port;
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

启动之后访问地址:http://localhost:9000/ 能看到 Hello world port 9000 输出就成功了。

而这个时候在服务注册中的界面的 「Instances currently registered with Eureka」一栏中, 就出现了刚刚启动的 eshop-eurela-client 项目