第一章 Java线程池技术应用
第二章 CountDownLatch和Semaphone的应用
第三章 Spring Cloud 简介
第四章 Spring Cloud Netflix 之 Eureka
今天我们讲解Spring Cloud微服务的第一代实现:Spring Cloud Netflix
Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。
Spring Cloud 使用 Spring Boot 思想为 Eureka 增加了自动化配置,开发人员只需要引入相关依赖和注解,就能将 Spring Boot 构建的微服务轻松地与 Eureka 进行整合。
附简单的Netflix微服务架构图(Zuul太麻烦直接由Gateway替代):
Alibaba微服务架构图:
想在Netflix、Alibaba之间切换的,可以看下图,替换掉相关组件,核心业务代码基本没有太大变化。
Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:Eureka Server、Eureka Client
组件 | 介绍 |
---|---|
Eureka Server | Eureka 服务注册中心,主要用于提供服务注册功能 |
Eureka Client | Eureka 客户端,通常指的是微服务系统中各个微服务 |
功能 | 介绍 |
---|---|
服务注册中心(Register Service) | 它是一个 Eureka Server,用于提供服务注册和发现功能。 |
服务提供者(Provider Service) | 它是一个 Eureka Client,用于提供服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现。 |
服务消费者(Consumer Service) | 它是一个 Eureka Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。 |
名称:SpringCloud
4.0.0 pom org.springframework.boot spring-boot-starter-parent 2.6.13 com.hqyj drp 0.0.1-SNAPSHOT drp-parent Demo project for Spring Boot 8 8 UTF-8 1.8 1.8 4.12 1.2.17 1.16.18 org.springframework.cloud spring-cloud-dependencies 2021.0.5 pom import org.apache.maven.plugins maven-compiler-plugin 3.5.1 ${maven.compiler.target}
4.0.0 com.hqyj SpringCloud 0.0.1-SNAPSHOT common-api 8 8 UTF-8 org.projectlombok lombok
添加Main.java,指定main入口,防止Maven package / install打包失败
public class Main { public static void main(String[] args) { System.out.println("common-api"); } }
4.0.0 com.hqyj SpringCloud 0.0.1-SNAPSHOT eureka-server 8 8 UTF-8 true org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.projectlombok lombok true com.github.enesusta spring-devtools 1.0.1 true org.springframework.cloud spring-cloud-starter-netflix-eureka-server
在resource目录下,新建application.yml文件
编辑application.yml文件,添加eureka配置
server: port: 7001 eureka: instance: hostname: localhost #eureka服务端的实例名称, client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机版服务注册中心
创建EurekaServerApplication.java启动文件
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class,args); } }
启动:http://localhost:7001/
4.0.0 com.hqyj SpringCloud 0.0.1-SNAPSHOT user-service 8 8 UTF-8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true org.springframework.boot spring-boot-starter-test test junit junit 4.12 org.springframework springloaded 1.2.8.RELEASE org.springframework.cloud spring-cloud-starter-netflix-eureka-client com.hqyj common-api 0.0.1-SNAPSHOT
server: port: 8001 spring: application: name: user-service #微服务名称 eureka: client: #将客户端注册到 eureka 服务列表内 service-url: defaultZone: http://localhost:7001/eureka #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
创建UserApplication.java启动文件
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class,args); } }
http://localhost:8001/user/userInfoList
Eureka 作为Netflix 公司开发的一款开源的服务注册与发现组件,还是十分经典的。在服务注册与发现这一块,也是十分优秀,有兴趣的同学可以去下载Eureka的源码研究一下,看看Eureka是如何实现服务注册,调用端是如何发现服务并调用,最后再看看Eureka里同一个服务多台机器实例是如何实现负载均衡调用的。