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

SpringCloud学习笔记-Eureka基础的更多相关文章

  1. 006 SpringCloud 学习笔记2-----SpringCloud基础入门

    1.SpringCloud概述 微服务是一种架构方式,最终肯定需要技术架构去实施. 微服务的实现方式很多,但是最火的莫过于Spring Cloud了.SpringCloud优点: - 后台硬:作为Sp ...

  2. SpringCloud学习笔记(一)——基础

    什么是微服务架构 简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进 ...

  3. 【转】SpringCloud学习笔记(一)——基础

    什么是微服务架构 简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进 ...

  4. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  5. SpringCloud学习笔记(3):使用Feign实现声明式服务调用

    简介 Feign是一个声明式的Web Service客户端,它简化了Web服务客户端的编写操作,相对于Ribbon+RestTemplate的方式,开发者只需通过简单的接口和注解来调用HTTP API ...

  6. SpringCloud学习笔记(4):Hystrix容错机制

    简介 在微服务架构中,微服务之间的依赖关系错综复杂,难免的某些服务会出现故障,导致服务调用方出现远程调度的线程阻塞.在高负载的场景下,如果不做任何处理,可能会引起级联故障,导致服务调用方的资源耗尽甚至 ...

  7. SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

    简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控.本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化. 项目介绍 sc ...

  8. SpringCloud学习笔记(6):使用Zuul构建服务网关

    简介 Zuul是Netflix提供的一个开源的API网关服务器,SpringCloud对Zuul进行了整合和增强.服务网关Zuul聚合了所有微服务接口,并统一对外暴露,外部客户端只需与服务网关交互即可 ...

  9. SpringCloud学习笔记(7):使用Spring Cloud Config配置中心

    简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...

随机推荐

  1. Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项

    Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ServerSignature指令概述 ...

  2. input事件在进行模糊搜索时,用到的即时监测input的值变化的方法(即时搜索的input和propertychange方法)

    做搜索功能的时候,经常遇到输入框检查的需求,最常见的是即时搜索,今天好好小结一下. 即时搜索的方案: (1)change事件    触发事件必须满足两个条件: a)当前对象属性改变,并且是由键盘或鼠标 ...

  3. php7中的dirname,intdiv,define

    <?php //dirname可指定目录级数 //intdiv整数整除 //define可以定义数组 echo dirname('/var/www/html/app/etc/config'); ...

  4. 配置VScode c语言环境

    vscode 提示 <sys/socket.h>找不到, 原来是不同平台上,头文件不一样. 参考:https://blog.csdn.net/qq_28581077/article/det ...

  5. 2019牛客暑期多校训练营(第一场):XOR(线性基)

    题意:给定数组,求所有异或起来为0的集和的大小之和. 思路:由于是集合大小,我们换成考虑每个元素在多少个集合里有贡献. 先生成线性基. 对于没有插入线性基的元素x,贡献是2^(N-base-1),因为 ...

  6. WinDbg常用命令系列---!findstack

    简介 !findstack扩展查找所有包含指定的符号或模块的堆栈.此命令搜索线程调用堆栈中的特定符号,并显示匹配的线程. 使用形式 !findstack Symbol[DisplayLevel] !f ...

  7. ent 基本使用十八 查询谓词

    ent 生成的代码包含了比较完整的查询谓词 字段谓词 Bool: =, != Numeric: =, !=, >, <, >=, <=, IN, NOT IN Time: =, ...

  8. luogu P1447 [NOI2010]能量采集 欧拉反演

    题面 题目要我们求的东西可以化为: \[\sum_{i=1}^{n}\sum_{j=1}^{m}2*gcd(i,j)-1\] \[-nm+2\sum_{i=1}^{n}\sum_{j=1}^{m}gc ...

  9. day40

    session / cookies : 会话跟踪技术是Cookie与Session 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话. Cookie通过在客户端记录信息确定用 ...

  10. linux 运维基本操作

    本记录来自腾讯云实验  https://cloud.tencent.com/developer/labs/lab/10000 目录操作 任务时间:5min ~ 10min 创建目录 使用 mkdir ...