Spring Cloud学习笔记1 服务注册与发现组件Eureka

1.简介

我们知道微服务系统由很多个服务单元组成,比如一个电商系统平台,可能会把账户业务,会员业务,商品业务,订单业务等业务模块拆解出来作为单独的微服务单元,这些微服务之间互相依赖,且数量越多,管理维护的难度就越大,所以一套微服务系统需要服务注册中心来统一管理微服务单元。
在SpringCloud中,可选择ConsulZookeeperNacosEureka作为服务注册和发现的组件,其中Eureka是SpringCloud首选推荐的服务注册和发现组件。本篇博客,将介绍Eureka的使用。

2.代码

本案例有多个Springboot工程,为了便于管理,采用maven多module的结构。最终项目结构如下
| _springcloud1
 | _eureka-client
 | _eureka-server
 | _pom.xml

2.1创建一个父级工程

首先创建一个父maven工程,父maven工程中的src包是没有用的,可以将它删掉,父maven工程的pom文件如下

<?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.czx</groupId>
    <artifactId>springcloud1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

2.2编写Eureka Server

在父工程下创建一个springboot子模块,命名为eureka-server,这个工程将作为服务注册中心。
在这里插入图片描述
eureka-server工程的pom文件引入依赖如下

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.czx</groupId>
        <artifactId>springcloud1</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <artifactId>eureka-server</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

使用Spring Initializr方式构建的SpringBoot工程一般在resource目录下会有一个application.properties文件,由于我喜欢用yml文件,所以我会把application.properties文件删掉然后新建一个application.yml。如果目录下同时存在application.yml和application.properties的话,程序启动时会优先读取application.properties,所以properties和yml最好2选1,读者可以自行选择使用properties或者yml。
yml文件中的配置如下

server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    #是否将自己这个服务注册到EurekaServer中,由于本应用为注册中心,我们不需要它自己向自己注册,所以设置为false。默认为true
    register-with-eureka: false
    fetch-registry: false #是否从EurekaServer获取注册信息 默认true 单点的情况下不存在其他的EurkaServer 所以为false
    service-url:
      default-zone: http://${eureka.instance.hostname}:${server.port}/eureka #注册中心的地址 程序启动后会向这个地址发送http请求,这样一来,注册中心就会知道自己手底下管理这这么一个小弟。 默认为http://localhost:8761/eureka 多个地址使用","分割

在工程的启动类上加上注解@EnableEurekaServer,开启服务注册中心的功能

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

到这一步Eureka Server的所有搭建工作已经完成了。程序启动起来试试看,
浏览器访问 http://localhost:8761/
在这里插入图片描述
界面上的 Instances currently registered with Eureka这一项上没有任何注册的实例,没有是正常的,因为还没有Eureka Client客户端向注册中心Eureka Server注册实例。接下来我们来编写Eureka Client的代码。

2.3编写Eureka Client

在父工程下再创建一个springboot子模块,命名为eureka-client,该工程作为Eureka Client向服务注册中心Eureka Server注册。
在这里插入图片描述
eureka-client的pom文件引入依赖如下

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.czx</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <artifactId>eureka-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-client</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

将eureka-client工程resource目录下的application.properties删掉,新建一个application.yml。yml文件中配置如下

eureka:
  client:
    service-url:
      default-zone: http://localhost:8761/eureka/ #注册中心的地址 程序启动后会向这个地址发送http请求,这样一来,注册中心就会知道自己手底下管理这这么一个小弟。 默认为http://localhost:8761/eureka 多个地址使用","分割
server:
  port: 8763
spring:
  application:
    name: eureka-client

值得一提的是,如果是版本号为Dalston之后的SpringCloud版本,那么就不需要再加@EnableEurekaClient注解了,只要引入spring-cloud-starter-netflix-eureka-client的起步依赖,工程就会自动作为服务客户端向Eureka Server注册。
到此Eureka Client工程也搭建完了。我们先启动Eureka Server工程,然后启动Eureka Client工程。在浏览器上访问 http://localhost:8761/
在这里插入图片描述
在上图中,Instances currently registered with Eureka这一项中已经有一个实例注册上来了,实例名为EUREKA-CLIENT,Status为UP(在线),端口号为8763.这就说明Eureka Client已经成功向Eureka Server注册。

到此,Spring Cloud的服务注册与发现就已经讲完了。但是实际项目中,微服务实例的数量如果较多,有几十甚至上百个的时候,Eureka Server就会承担非常高的负载,那么就需要将其集群化部署。下一篇博客再讲如何搭建高可用的Eureka Server集群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值