• Spring Cloud Netflix 之 Eureka


    前言

    请添加图片描述

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家https://www.captainbed.cn/z
    请添加图片描述

    ChatGPT体验地址

    请添加图片描述

    前言

    Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。
    Spring Cloud 使用 Spring Boot 思想为 Eureka 增加了自动化配置,开发人员只需要引入相关依赖和注解,就能将 Spring Boot 构建的微服务轻松地与 Eureka 进行整合。

    1、Eureka 两大组件

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

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

    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、查看编译后的包


  • 相关阅读:
    零基础刷LeetCode-10- I. 斐波那契数列(javaScript实现)
    rabbitMQ 中三种常用交换机:direct、topic、fanout的使用以及区别和queue消息的Ack,Nack ,Reject 消息类型
    243 h160 相交链表
    CV (3)- Loss Functions and Optimization
    计算机科学领域有哪些优秀的博客?
    OpenHarmony自定义构建函数:@Builder装饰器
    yolov8旋转目标检测部署教程(附代码c++/python)
    2022亚太数学杯数学建模竞赛C题(思路、程序......)
    Kafka消息队列中关于消息的实现原理
    【Redis】Redis锁详解
  • 原文地址:https://blog.csdn.net/Why_does_it_work/article/details/139630652