这篇文章,主要介绍微服务中的注册中心Eureka及其基础环境的搭建【源代码地址】。
目录
一、Eureka注册中心
1.1、什么是注册中心
1.2、注册中心原理
二、搭建Eureka注册中心环境
2.1、创建父工程,引入微服务依赖
2.2、创建Eureka服务端工程
(1)引入Eureka服务端依赖
(2)创建启动类
(3)添加配置文件
(4)启动工程测试
2.3、创建Eureka客户端工程
(1)引入Eureka客户端依赖
(2)创建启动类
(3)添加配置文件
(4)启动工程测试
一、Eureka注册中心
1.1、什么是注册中心
- 微服务架构中,会有很多的服务,每个服务都有对应的IP地址和端口,以及相关的服务信息,这里就存在一个问题???
- 就是服务A调用服务B的时候,怎么知道B的IP地址和端口信息呢???
- 可以有多种解决方案,比如:将服务A的IP地址和端口,直接在服务B配置文件中写死,这样,调用服务的时候,通过配置文件就可以获取到IP和端口。
- 上面这种方式不太灵活,如果服务A部署到另外一台机器上面,那么就需要修改服务B中的配置文件,这显然是不可取的方式。
- 为了解决上面这种情况,于是就出现了注册中心。
- 基本思想:单独一个服务出来,这个服务专门用于收集和保存所有微服务的IP地址和端口相关信息。
- 如果某个服务A需要调用服务B,则首先到注册中心里面查询服务B的地址信息,拿到地址信息后,在进行服务的调用。
- 这种模式下,无论服务A部署到哪一台机器上面,都不会影响到服务B,因为服务B都是从注册中心获取服务信息,它不用管注册中心如何收集和保存的服务B地址信息。
注册中心,可以理解成为是一个微服务之间的一个电话簿,其中某个微服务需要调用另一个微服务的时候,只需要从电话簿里面获取到指定微服务的IP等信息,然后通过Restful的方式进行服务的消费即可。
常见的注册中心有如下几种:
- Eureka。
- Consul。
- Zookeeper。
- Dubbo。
- Nacos。
注册中心的核心功能主要是:服务注册和服务发现。
1.2、注册中心原理
Eureka注册中心,它是采用【C/S】模式实现的一种架构,它由两部分组成,分别是:Eureka服务端、Eureka客户端。
- Eureka服务端:服务端用于接收和保存客户端注册的信息,即:服务注册。
- Eureka客户端:客户端用于从Eureka服务端获取其他微服务的相关信息,和eureka服务端保持通信,即:服务发现。
Eureka注册中心大致运行原理如下图所示:
上图就是注册中心大致的一个过程,几乎所有的注册中心都是采用这种模式的,基本步骤如下。
- 首先,搭建一个Eureka服务端作为注册中心。
- 当服务提供者、服务消费者启动的时候,会将自身的地址信息发送给eureka注册中心进行保存。
- 服务提供者、服务消费者会从注册中心获取所有可用服务列表。
- 通过可用服务列表,服务消费者根据相关地址,通过HTTP或者消息组件调用服务提供者的接口进行服务消费。
二、搭建Eureka注册中心环境
2.1、创建父工程,引入微服务依赖
因为微服务是基于SpringBoot框架进行开发的,所以我们需要引入SpringBoot的依赖,并且还需要引入SpringCloud的依赖。
- 在父工程里面,引入【SpringBoot】和【SpringCloud】两个依赖。
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<groupId>com.gitcode.eureka</groupId>
<artifactId>eureka-demo</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modules>
<module>eureka-server</module>
</modules>
<name>eureka-demo</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!-- 引入SpringBoot依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<!-- 使用 dependencyManagement 依赖管理,统一管理组件的版本 -->
<dependencies>
<!-- 引入 SpringCloud 微服务依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
- 注意:SpringBoot的版本和SpringCloud的版本是有对应关系的,不同的SpringBoot版本需要使用不同的SpringCloud版本,可以从下面这个地址查找对应的微服务版本。
【SpringBoot和SpringCloud版本对应关系】,这个地址中描述了版本的对应关系,如下图所示:
2.2、创建Eureka服务端工程
(1)引入Eureka服务端依赖
- 创建【eureka-server】子工程,在pom文件里面引入【spring-cloud-starter-netflix-eureka-server】依赖。
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<groupId>com.gitcode.eureka</groupId>
<artifactId>eureka-demo</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>eureka-server</artifactId>
<version>1.0.0</version>
<name>eureka-server</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 引入 Web 工程 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 eureka 服务端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
(2)创建启动类
- 创建工程启动类,并且启动类上面添加【@EnabledEurekaServer】注解,开启Eureka服务端功能。
package com.gitcode.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @version 1.0.0
* @Date: 2022/12/30 11:05
* @Copyright (C) ZhuYouBin
* @Description:
*/
// 开启 Eureka 服务端
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApp {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApp.class, args);
}
}
(3)添加配置文件
- 在【application.yml】配置文件中,添加eureka相关的配置信息。
server:
port: 8761
spring:
application:
name: eureka-server # 微服务工程应用名称
# eureka配置
eureka:
instance:
hostname: ${spring.application.name}
client:
register-with-eureka: false # 是否将自己注册到eureka注册中心
fetch-registry: false # 是否从eureka注册中心获取注册信息
(4)启动工程测试
结果上面三个步骤,eureka服务端工程已经创建完成了,下面就是启动工程,浏览器访问【http://localhost:8761/】即可看到注册中心的界面,如下图:
2.3、创建Eureka客户端工程
(1)引入Eureka客户端依赖
- 创建【eureka-client】子工程,在pom文件里面引入【spring-cloud-starter-netflix-eureka-client】依赖。
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<groupId>com.gitcode.eureka</groupId>
<artifactId>eureka-demo</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>eureka-client</artifactId>
<version>1.0.0</version>
<name>eureka-client</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 引入 Web 工程 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 eureka 客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
(2)创建启动类
- 创建工程启动类,并且启动类上面添加【@EnabledEurekaClient】注解,开启Eureka客户端的功能。
package com.gitcode.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @version 1.0.0
* @Date: 2022/12/30 11:05
* @Copyright (C) ZhuYouBin
* @Description:
*/
// 开启 Eureka 客户端
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApp {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApp.class, args);
}
}
(3)添加配置文件
server:
port: 9527
spring:
application:
name: eureka-client # 微服务工程应用名称
# eureka配置
eureka:
instance:
hostname: ${spring.application.name}
client:
register-with-eureka: true # 是否将自己注册到eureka注册中心
fetch-registry: true # 是否从eureka注册中心获取注册信息
service-url:
defaultZone: http://localhost:8761/eureka/ # eureka服务端的地址
(4)启动工程测试
启动eureka服务端工程和eureka客户端工程,然后浏览器访问【http://localhost:8761/】注册中心,可以在eureka注册中心界面看见一个客户端信息。
到此,Eureka注册中心的环境搭建完成了。
综上,这篇文章结束了,主要介绍微服务中的注册中心Eureka及其基础环境的搭建。