云原生微服务治理 第四章 Spring Cloud Netflix 服务注册发现组件Eureka
作者:mmseoamin日期:2023-12-13

系列文章目录

第一章 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![在这里插入图片描述](upload/website_attach/202312/1_GTX796WM7W4VPN7M.jpeg)
                • 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 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配置

                    在这里插入图片描述

                    
                    
                       4.0.0
                       pom
                       
                          org.springframework.boot
                          spring-boot-starter-parent
                          2.6.13
                           
                       
                       com.hqyj
                       drp
                       0.0.1-SNAPSHOT
                       drp-parent
                       Demo project for Spring Boot
                       
                          8
                          8
                          UTF-8
                          1.8
                          1.8
                          4.12
                          1.2.17
                          1.16.18
                       
                       
                          
                             
                                org.springframework.cloud
                                spring-cloud-dependencies
                                2021.0.5
                                pom
                                import
                             
                          
                       
                       
                            
                                
                                    org.apache.maven.plugins
                                    maven-compiler-plugin
                                    3.5.1
                                    
                                        ${maven.compiler.source}
                                        ${maven.compiler.target}
                                    
                                
                            
                        
                    
                    

                    3.2、创建子公共模块common-api

                    3.2.1、添加module

                    在这里插入图片描述

                    在这里插入图片描述

                    3.2.2、pom.xml配置

                    
                    
                        4.0.0
                        
                            com.hqyj
                            SpringCloud
                            0.0.1-SNAPSHOT
                        
                        common-api
                        
                            8
                            8
                            UTF-8
                        
                        
                            
                                org.projectlombok
                                lombok
                            
                        
                    
                    

                    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

                    
                    
                        4.0.0
                        
                            com.hqyj
                            SpringCloud
                            0.0.1-SNAPSHOT
                        
                        eureka-server
                        
                            8
                            8
                            UTF-8
                            true
                        
                        
                            
                                org.springframework.boot
                                spring-boot-starter-web
                            
                            
                                org.springframework.boot
                                spring-boot-starter-test
                                test
                            
                            
                                org.projectlombok
                                lombok
                                true
                            
                            
                                com.github.enesusta
                                spring-devtools
                                1.0.1
                                true
                            
                            
                                org.springframework.cloud
                                spring-cloud-starter-netflix-eureka-server
                            
                        
                        
                    
                    

                    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

                    
                    
                        4.0.0
                        
                            com.hqyj
                            SpringCloud
                            0.0.1-SNAPSHOT
                        
                        user-service
                        
                            8
                            8
                            UTF-8
                        
                        
                            
                                org.springframework.boot
                                spring-boot-starter-web
                            
                            
                            
                                org.springframework.boot
                                spring-boot-devtools
                                runtime
                                true
                            
                            
                            
                                org.springframework.boot
                                spring-boot-starter-test
                                test
                            
                            
                            
                                junit
                                junit
                                4.12
                            
                            
                            
                                org.springframework
                                springloaded
                                1.2.8.RELEASE
                            
                            
                                org.springframework.cloud
                                spring-cloud-starter-netflix-eureka-client
                            
                            
                                com.hqyj
                                common-api
                                0.0.1-SNAPSHOT
                            
                        
                    
                    

                    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里同一个服务多台机器实例是如何实现负载均衡调用的。