zoukankan      html  css  js  c++  java
  • SpringCloud学习笔记-Eureka基础

    Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的微服务治理功能.

    服务端

    依赖

    settings.gradle

    pluginManagement {
        resolutionStrategy {
        }
        repositories {
            maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
            gradlePluginPortal()
        }
    }
    rootProject.name = 'swb-infra-eureka'
    

    build.gradle

    buildscript {
        ext {
            //定义一个变量,统一规定springboot的版本
            springBootVersion = '2.0.1.RELEASE'
        }
    
    }
    plugins {
        id "idea"
        id "java"
        id 'org.springframework.boot' version "2.0.1.RELEASE"
        id 'io.spring.dependency-management' version "1.0.8.RELEASE"
    }
    
    group = 'com.swb'
    version = '0.0.1-SNAPSHOT'
    
    description = """swb-infra-eureka"""
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
    repositories {
        maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
    }
    
    dependencyManagement {
        imports {
            mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"
            mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Finchley.SR1'
        }
    }
    
    dependencies {
        compile "org.springframework.cloud:spring-cloud-starter-netflix-eureka-server"
    }
    

    配置文件

    application.yml

    spring:
      application:
        name: swb-infra-eureka
      profiles:
        active: ${ACTIVE_PROFILE:default}
      cloud:
        inetutils:
          # 首选的网络地址,支持JAVA正则表达式
          preferred-networks: ${CLOUD_INETUTILS_PREFERRED_NETWORKS:127.0.0.1}
          # 忽略的网卡名,支持JAVA正则表达式,这在使用docker启动时很有用,解决多网卡注册问题.
          ignored-interfaces: docker0, veth.*
    server:
      port: 19100
      servlet:
        context-path: /
    eureka:
      # lease-expiration-duration-in-seconds: 20
      # 生产环境中官方是不建议修改默认配置,因为那样会破坏 eureka server 的保护模式
      server:
        # 关闭保护模式(生产环境不建议修改)
        enable-self-preservation: false
        # 清理间隔(默认是60 * 1000 毫秒)(生产环境不建议修改)
        eviction-interval-timer-in-ms: 10000
        # Eureka 拉取服务列表时间(默认:30秒)(生产环境不建议修改)
        remote-region-registry-fetch-interval: 5
      client:
        # eureka server 没必要自己把自己注册上去,所以可以设置成 false
        register-with-eureka: false
        # 是否从Eureka Server上获取注册信息,默认为true,此处建议修改成 false (单机设置的意义不大,如果设置成 true 启动会去抓取一次注册表,获取不到更新缓存就会出错(该错误不影响 eureka 正常使用))
        fetch-registry: false
        service-url:
          # 默认注册地址 this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
          # 划重点:此处的 defaultZone 千万别写成 default-zone
          defaultZone: http://${EUREKA_IP:127.0.0.1}:${server.port}/eureka/
          # 从 Eureka 服务器端获取注册信息的间隔时间(默认:30秒)
        registry-fetch-interval-seconds: 5
    

    开启注册服务

    在启动类上添加注解@EnableEurekaServer.

    客户端

    依赖

    settings.gradle

    build.gradle

    buildscript {
        ext {
            //定义一个变量,统一规定springboot的版本
            springBootVersion = '2.0.1.RELEASE'
        }
        repositories {
            maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
        }
    }
    
    plugins {
        id "org.springframework.boot" version "2.0.1.RELEASE"
        id "io.spring.dependency-management" version "1.0.8.RELEASE"
        id "idea"
        id "java"
    }
    
    group = 'com.XXX'
    version = '0.0.1-SNAPSHOT'
    
    description = """XXX"""
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
    // 实时刷新依赖
    configurations.all {
        resolutionStrategy {
            cacheChangingModulesFor 0, 'seconds'
            cacheDynamicVersionsFor 0, 'seconds'
        }
    }
    
    repositories {
        maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
    }
    
    dependencyManagement {
        imports {
            mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Finchley.SR1'
        }
    }
    
    dependencies {
        compile "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client"
    }
    
    

    配置

    application.yml

    只展示与eureka相关配置

    eureka:
      instance:
        ip-address: ${EUREKA_INSTANCE_IP:${spring.cloud.client.ip-address:127.0.0.1}} #❶
        prefer-ip-address: true
        instance-id: ${eureka.instance.ip-address}:${server.port}:${spring.application.name} #❷
      client:
        serviceUrl:
          defaultZone: http://${EUREKA_IP:${spring.cloud.client.ip-address:127.0.0.1}}:19100/eureka/
    

    启动

    启动类添加注解@EnableDiscoveryClient@EnableEurekaClient

    Notes

    ❶ 1.5.X版本可以将此设置为${spring.cloud.client.ipAddress},2.X对应的是${spring.cloud.client.ip-address},此处设置默认值127.0.0.1是为了兼容版本.它们对应的源码类全路径是org.springframework.cloud.client.HostInfoEnvironmentPostProcessor

    eureka.instance.instance-id是在eureka上展示的数据,真实访问的IP为eureka.instance.ip-address,此处为了保持一致,因此直接引用了${eureka.instance.ip-address}

    Tips

    • Spring Cloud 是套件,不是单独的一个项目,因此版本号采用命名的方式,这也是为什么gradle中使用插件dependency-management的原因.可以参考SpringBoot及SpringCloud版本管理(Gradle版本)
    • 一般情况下不用配置spring.cloud.inetutils,这个主要是解决在使用docker启动时将服务注册在docker0网卡上导致服务间通信阻塞问题.

    参考

    一起来学Spring Cloud(F版) | 第一篇:认识Eureka

    SpringCloud的版本

    https://plugins.gradle.org/plugin/io.spring.dependency-management

    https://stackoverflow.com/questions/38221227/gradle-configuration-of-pluginrepository

    https://www.coder4.com/archives/5884

  • 相关阅读:
    02 Filter过滤器
    Vue入门
    Git教程
    Markdown 常用语言关键字
    王爽《汇编语言》(第三版)实验16解析
    王爽《汇编语言》(第三版)实验15解析
    王爽《汇编语言》(第三版)实验14解析
    王爽《汇编语言》(第三版)实验13解析
    王爽《汇编语言》(第三版)实验12解析
    王爽《汇编语言》(第三版)实验11解析
  • 原文地址:https://www.cnblogs.com/yw0219/p/11091506.html
Copyright © 2011-2022 走看看