云原生微服务 第四章 Spring Cloud Netflix 之 Eureka

系列文章目录

第一章 Java线程池技术应用
第二章 CountDownLatch和Semaphone的应用
第三章 Spring Cloud 简介
第四章 Spring Cloud Netflix 之 Eureka
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第1张图片


文章目录

  • 系列文章目录
    • @[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替代):
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第2张图片
Alibaba微服务架构图:
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第3张图片
想在Netflix、Alibaba之间切换的,可以看下图,替换掉相关组件,核心业务代码基本没有太大变化。
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第4张图片

1、Eureka 两大组件

Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:Eureka Server、Eureka Client

组件 介绍
Eureka Server Eureka 服务注册中心,主要用于提供服务注册功能
Eureka Client Eureka 客户端,通常指的是微服务系统中各个微服务

2、Eureka 服务注册与发现

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第5张图片

功能 介绍
服务注册中心(Register Service) 它是一个 Eureka Server,用于提供服务注册和发现功能。
服务提供者(Provider Service) 它是一个 Eureka Client,用于提供服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现。
服务消费者(Consumer Service) 它是一个 Eureka Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。

3、案例

3.1、创建主工程

名称:SpringCloud
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第6张图片

3.1.1、主工程pom.xml配置

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第7张图片


<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

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第8张图片
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第9张图片

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

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第10张图片

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文件
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第11张图片

编辑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

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第12张图片
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第13张图片

3.3.3.2、运行EurekaServerApplication.java文件

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第14张图片
启动:http://localhost:7001/

3.4、创建用户服务模块user-service云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第15张图片

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

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第16张图片
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第17张图片

3.4.3.2、运行UserApplication.java文件

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第18张图片

3.4.3.3、测试

http://localhost:8001/user/userInfoList

3.5、查看编译后的包

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第19张图片
云原生微服务 第四章 Spring Cloud Netflix 之 Eureka_第20张图片


小结

Eureka 作为Netflix 公司开发的一款开源的服务注册与发现组件,还是十分经典的。在服务注册与发现这一块,也是十分优秀,有兴趣的同学可以去下载Eureka的源码研究一下,看看Eureka是如何实现服务注册,调用端是如何发现服务并调用,最后再看看Eureka里同一个服务多台机器实例是如何实现负载均衡调用的。

你可能感兴趣的:(Java微服务,云原生,微服务,eureka,源代码)