系列文章目录
第一章 Java线程池技术应用
第二章 CountDownLatch和Semaphone的应用
第三章 Spring Cloud 简介
第四章 Spring Cloud Netflix 之 Eureka
文章目录
- 系列文章目录
-
- @[TOC](文章目录)
- 前言
- 1、Eureka 两大组件
- 2、Eureka 服务注册与发现
- 3、案例
-
- 3.1、创建主工程
-
- 3.1.1、主工程pom.xml配置
- 3.2、创建子公共模块common-api
-
- 3.2.1、添加module
- 3.2.2、pom.xml配置
- 3.2.3、maven非springboot项目,增加main入口
- 3.3、创建Eureka注册中心模块eureka-server
-
- 3.3.1、配置pom.xml
- 3.3.2、配置application.yml
- 3.3.3、启动eureka-server
-
- 3.3.3.1、编译eureka-server
- 3.3.3.2、运行EurekaServerApplication.java文件
- 3.4、创建用户服务模块user-service![在这里插入图片描述](https://img-blog.csdnimg.cn/e52d0b166629469baa1cd934714c9831.png)
-
- 3.4.1、配置pom.xml
- 3.4.2、配置application.yml
- 3.4.3、启动user-service
-
- 3.4.3.1、编译user-service
- 3.4.3.2、运行UserApplication.java文件
- 3.4.3.3、测试
- 3.5、查看编译后的包
- 小结
文章目录
- 系列文章目录
-
- @[TOC](文章目录)
- 前言
- 1、Eureka 两大组件
- 2、Eureka 服务注册与发现
- 3、案例
-
- 3.1、创建主工程
-
- 3.1.1、主工程pom.xml配置
- 3.2、创建子公共模块common-api
-
- 3.2.1、添加module
- 3.2.2、pom.xml配置
- 3.2.3、maven非springboot项目,增加main入口
- 3.3、创建Eureka注册中心模块eureka-server
-
- 3.3.1、配置pom.xml
- 3.3.2、配置application.yml
- 3.3.3、启动eureka-server
-
- 3.3.3.1、编译eureka-server
- 3.3.3.2、运行EurekaServerApplication.java文件
- 3.4、创建用户服务模块user-service![在这里插入图片描述](https://img-blog.csdnimg.cn/e52d0b166629469baa1cd934714c9831.png)
-
- 3.4.1、配置pom.xml
- 3.4.2、配置application.yml
- 3.4.3、启动user-service
-
- 3.4.3.1、编译user-service
- 3.4.3.2、运行UserApplication.java文件
- 3.4.3.3、测试
- 3.5、查看编译后的包
- 小结
前言
今天我们讲解Spring Cloud微服务的第一代实现:Spring Cloud Netflix
Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。
Spring Cloud 使用 Spring Boot 思想为 Eureka 增加了自动化配置,开发人员只需要引入相关依赖和注解,就能将 Spring Boot 构建的微服务轻松地与 Eureka 进行整合。
附简单的Netflix微服务架构图(Zuul太麻烦直接由Gateway替代):
Alibaba微服务架构图:
想在Netflix、Alibaba之间切换的,可以看下图,替换掉相关组件,核心业务代码基本没有太大变化。
1、Eureka 两大组件
Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:Eureka Server、Eureka Client
组件 | 介绍 |
---|---|
Eureka Server | Eureka 服务注册中心,主要用于提供服务注册功能 |
Eureka Client | Eureka 客户端,通常指的是微服务系统中各个微服务 |
2、Eureka 服务注册与发现
功能 | 介绍 |
---|---|
服务注册中心(Register Service) | 它是一个 Eureka Server,用于提供服务注册和发现功能。 |
服务提供者(Provider Service) | 它是一个 Eureka Client,用于提供服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现。 |
服务消费者(Consumer Service) | 它是一个 Eureka Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。 |
3、案例
3.1、创建主工程
名称:SpringCloud
3.1.1、主工程pom.xml配置
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.0modelVersion>
packaging>pompackaging>
parent>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-parentartifactId>
version>2.6.13version>
relativePath/>
parent>
groupId>com.hqyjgroupId>
artifactId>drpartifactId>
version>0.0.1-SNAPSHOTversion>
name>drp-parentname>
description>Demo project for Spring Bootdescription>
properties>
maven.compiler.source>8maven.compiler.source>
maven.compiler.target>8maven.compiler.target>
project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
maven.compiler.source>1.8maven.compiler.source>
maven.compiler.target>1.8maven.compiler.target>
junit.version>4.12junit.version>
log4j.version>1.2.17log4j.version>
lombok.version>1.16.18lombok.version>
properties>
dependencyManagement>
dependencies>
dependency>
groupId>org.springframework.cloudgroupId>
artifactId>spring-cloud-dependenciesartifactId>
version>2021.0.5version>
type>pomtype>
scope>importscope>
dependency>
dependencies>
dependencyManagement>
build>
plugins>
plugin>
groupId>org.apache.maven.pluginsgroupId>
artifactId>maven-compiler-pluginartifactId>
version>3.5.1version>
configuration>
source>${maven.compiler.source}source>
target>${maven.compiler.target}target>
configuration>
plugin>
plugins>
build>
project>
3.2、创建子公共模块common-api
3.2.1、添加module
3.2.2、pom.xml配置
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
modelVersion>4.0.0modelVersion>
parent>
groupId>com.hqyjgroupId>
artifactId>SpringCloudartifactId>
version>0.0.1-SNAPSHOTversion>
parent>
artifactId>common-apiartifactId>
properties>
maven.compiler.source>8maven.compiler.source>
maven.compiler.target>8maven.compiler.target>
project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
dependencies>
dependency>
groupId>org.projectlombokgroupId>
artifactId>lombokartifactId>
dependency>
dependencies>
project>
3.2.3、maven非springboot项目,增加main入口
添加Main.java,指定main入口,防止Maven package / install打包失败
public class Main {
public static void main(String[] args) {
System.out.println("common-api");
}
}
3.3、创建Eureka注册中心模块eureka-server
3.3.1、配置pom.xml
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
modelVersion>4.0.0modelVersion>
parent>
groupId>com.hqyjgroupId>
artifactId>SpringCloudartifactId>
version>0.0.1-SNAPSHOTversion>
parent>
artifactId>eureka-serverartifactId>
properties>
maven.compiler.source>8maven.compiler.source>
maven.compiler.target>8maven.compiler.target>
project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
skip-tests>trueskip-tests>
properties>
dependencies>
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-webartifactId>
dependency>
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-testartifactId>
scope>testscope>
dependency>
dependency>
groupId>org.projectlombokgroupId>
artifactId>lombokartifactId>
optional>trueoptional>
dependency>
dependency>
groupId>com.github.enesustagroupId>
artifactId>spring-devtoolsartifactId>
version>1.0.1version>
optional>trueoptional>
dependency>
dependency>
groupId>org.springframework.cloudgroupId>
artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
project>
3.3.2、配置application.yml
在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/ #单机版服务注册中心
3.3.3、启动eureka-server
创建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);
}
}
3.3.3.1、编译eureka-server
3.3.3.2、运行EurekaServerApplication.java文件
启动:http://localhost:7001/
3.4、创建用户服务模块user-service
3.4.1、配置pom.xml
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
modelVersion>4.0.0modelVersion>
parent>
groupId>com.hqyjgroupId>
artifactId>SpringCloudartifactId>
version>0.0.1-SNAPSHOTversion>
parent>
artifactId>user-serviceartifactId>
properties>
maven.compiler.source>8maven.compiler.source>
maven.compiler.target>8maven.compiler.target>
project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
dependencies>
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-webartifactId>
dependency>
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-devtoolsartifactId>
scope>runtimescope>
optional>trueoptional>
dependency>
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-testartifactId>
scope>testscope>
dependency>
dependency>
groupId>junitgroupId>
artifactId>junitartifactId>
version>4.12version>
dependency>
dependency>
groupId>org.springframeworkgroupId>
artifactId>springloadedartifactId>
version>1.2.8.RELEASEversion>
dependency>
dependency>
groupId>org.springframework.cloudgroupId>
artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
dependency>
groupId>com.hqyjgroupId>
artifactId>common-apiartifactId>
version>0.0.1-SNAPSHOTversion>
dependency>
dependencies>
project>
3.4.2、配置application.yml
server:
port: 8001
spring:
application:
name: user-service #微服务名称
eureka:
client: #将客户端注册到 eureka 服务列表内
service-url:
defaultZone: http://localhost:7001/eureka #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
3.4.3、启动user-service
创建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);
}
}
3.4.3.1、编译user-service
3.4.3.2、运行UserApplication.java文件
3.4.3.3、测试
http://localhost:8001/user/userInfoList
3.5、查看编译后的包
小结
Eureka 作为Netflix 公司开发的一款开源的服务注册与发现组件,还是十分经典的。在服务注册与发现这一块,也是十分优秀,有兴趣的同学可以去下载Eureka的源码研究一下,看看Eureka是如何实现服务注册,调用端是如何发现服务并调用,最后再看看Eureka里同一个服务多台机器实例是如何实现负载均衡调用的。