# 150. 商品详情页动态渲染系统:Spring Cloud 之 Eureka 注册中心
温馨提示
本课程的 spring cloud 教程基本上是官网文档里面的教程, 所以如果觉得稍显吃力可以参考 慕课 Spring Cloud 微服务实战笔记 (opens new window)
# 什么是注册中心?
- 首先有一个 eureka server,服务的注册与发现的中心
- 可以将你写好的服务注册到 eureka server 上去
- 别人如果需要调用你的服务,就可以才能够 eureka server 上查找你的服务所在地址,然后调用
# eureka 基本原理
- 服务都会注册到 eureka 的注册表
- eureka 有心跳机制,自动检测服务,故障时自动从注册表中摘除
- 每个服务也会缓存 eureka 的注册表,及时 eureka server 挂掉,每个服务也可以基于本地注册表与其他服务进行通信
- 如果 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
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
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
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
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
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
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
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 项目