SpringCloud微服务-服务发现Eureka使用篇(含gradle项目配置使用)

简介

Spring Cloud 是基于springboot的一系列工具框架的集合体,提供了一套完整的微服务解决方案,它提供了微服务开发所需的服务发现注册(eureka)、负载均衡(Ribbon)、熔断器(Hystrix)、断路器、智能路由(Zuul、微代理、控制总线、全局锁、决策竞选、分布式会话集群状态管理等组件

梳理springCloud微服务这部分的内容,个人想通过springCloud微服务的整理,加深对springcloud的认知和理解

Eureka服务注册和服务发现

既然Eureka是服务注册和服务发现的组件,那么我们先通过一张图整体来了解下eureka的整体流程

其中的调用关系 :

首先服务提供者在启动时,向注册中心注册自己提供的服务

接着服务消费者在启动时,向注册中心订阅自己所需要的服务

然后注册中心返回服务提供者地址给消费者

最后服务消费者从提供者地址中调用消费者

下面我们就上手撸代码,来 理解这个调用流程关系

准备工作

之前总是玩maven这次换gradle尝尝鲜,基础配置,然后通过一个小例子使用eureka:

  • 搭建服务注册中心
  • 注册服务提供者
  • 服务发现和消费

这里先罗列我们完整的项目目录结构

接下来将我们项目配置的gradle配置以及注释如下,

group 'springlib'
version = '0.0.1-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8

buildscript {
    ext {
        //统一规定springboot的版本
        springBootVersion = '2.0.2.RELEASE'
        //统一规定springcloud的版本
        springCloudVersion = 'Finchley.M8'
    }
    repositories {
      	//设置镜像仓库
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://repo.spring.io/milestone'}
    }

    dependencies {//用来打包
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
allprojects {
    repositories {
      //配置全局镜像仓库
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://repo.spring.io/milestone'}
    }
    //配置全局指定编码格式
    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
    }
}

//设定当前模块项目中的配置
subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'
    //spring boot 插件
    apply plugin: 'org.springframework.boot'
    //A Gradle plugin that provides Maven-like dependency management functionality
    apply plugin: 'io.spring.dependency-management'
    dependencies {
        compile ('org.springframework.boot:spring-boot-starter-web')
        testCompile('org.springframework.boot:spring-boot-starter-test')
    }
    dependencyManagement {
        imports {
            //spring bom helps us to declare dependencies without specifying version numbers.
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
    jar {
        manifest.attributes provider: 'gradle'
    }
}

到这里我们目标的项目的基础构建就结束了

服务注册中心

  • 1.创建一个java的gradle的module,我这里起名为cloudlib-eureka-server

    在这里插入图片描述

  • 2.在module内的build.gradle配置:

    dependencies {
        compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
    }
    

这个时候我们的EurekaServer的环境就配置结束

  • 3.创建启动类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    /**
     * 这个注解是声名Eureka的入口注解,后面我们会详细的分析eureka的原理
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class SpringlibApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringlibApplication.class, args);
    	}
    
    }
    
  • 4.配置Eureka的相关信息,即配置application.properties,当然都玩springboot了,肯定得配置高大上的application.yml

    #声名服务端口号
    server:
      port: 9899
    #设置服务名称
    eureka:
      instance:
        hostname: localhost
      client:
    		#是否在注册中心注册自己
        register-with-eureka: false
        #是否从 eureka 获取注册信息
        fetch-registry: false
        #配置注册中心的url (注意:地址最后面的 /eureka/ 这个是固定值)服务注册也就依赖这个url,后续我们会用到
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

到这里我们server的配置就结束了,接下来我们启动服务访问看看,地址就是设置的服务名称和端口号,这里即是:http://localhost:9899/

当访问看到Eureka大大的logo时,表示我们已经启动成功,如图:

在这里插入图片描述

使用 Eureka 进行服务注册和发现

  • 与服务注册中心一致,创建一个java的gradle的module,笔者这里起名为cloudlib-eureka-client

  • 在module的build.gradle中配置

    dependencies {
        compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
    }
    
  • 创建启动类

    @EnableDiscoveryClient
    @SpringBootApplication
    public class SpringEurekaClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringEurekaClientApplication.class, args);
        }
    }
    
  • 编辑application.yml,编辑使用

    spring:
      application:
        name: cloudlib-eureka-client
    server:
      port: 8989
    eureka:
      client:
        service-url:
              defaultZone: http://localhost:9899/eureka
        eureka-server-port: 9899
      instance:
        prefer-ip-address: true
        appname: localhost
    
  • 这里客户端的配置就结束了,这时我们打开刚才的注册中心
    在这里插入图片描述

    这里就展示着我们向注册中心注册的客户端信息

    到这里可能有人看到在我们的注册中心上有个红色类似警告的错误

    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

    这样的信息

    这里的意思是Eureka进入保护模式,暂时不会注销服务注册表中的服务
    

梳理

  • 通过spring-cloud-starter-netflix-eureka-server和@EnableEurekaServer实现服务注册中心
  • 通过spring-cloud-starter-netflix-eureka-client和@EnableDiscoveryClient使用并注册到服务注册中心
  • 通过spring-cloud-starter-netflix-eureka-server和@EnableDiscoveryClient使用注册中心并发现服务

下一篇我们从源码来分析eureka的流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章