一、Eureka元数据

参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_eureka_metadata_for_instances_and_clients

  了解Eureka元数据的工作原理,以便您可以在平台中使用它。有主机名,IP地址,端口号,状态页和运行状况检查等标准元数据。这些信息发布在服务注册中心,并由客户用于直接联系服务。额外的元数据可以添加到eureka.instance.metadataMap中的实例注册中,并且可以在远程客户端访问,但通常不会改变客户端的行为,除非它意识到元数据的含义。Spring Cloud已经为元数据映射赋予了含义,下面介绍了一些特殊情况。

1.1、改变Eureka 实例Id

application.yml. 

eureka:
instance:
instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}

或者个人使用:    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}

1.2、自定元数据  

在providor中提供:microservice-provider-user

eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
metadata-map:
    zone: ABC # zone默认带的 eureka可以理解的数据
    lihongxu: BBC # 自定义的 不会影响客户端行为

可在eureka中查看:http://localhost:8761/eureka/apps/microservice-provider-user

可以看到其中manager.port已经影响实际接口,但自定义无影响

二、为甚么注册一个服务比较慢

  作为一个实例还涉及到注册表的周期性心跳(通过客户端的serviceUrl),默认持续时间为30秒。服务不可用于客户端发现,直到实例,服务器和客户端在其本地缓存中都具有相同的元数据(因此可能需要3次检测信号)。您可以使用eureka.instance.leaseRenewalIntervalInSeconds更改期限,这将加快获取客户端连接到其他服务的过程。在生产中,坚持使用默认值可能会更好,因为在服务器内部有一些计算可以对租期更新进行假设。

三、Eureka高可用,zones,regions

  Eureka服务器没有后端存储,但注册表中的服务实例必须发送心跳信号以保持其注册是最新的(所以这可以在内存中完成)。客户端还拥有一个eureka注册的内存缓存(因此,他们不必为每个服务请求都去注册表)。默认情况下,每个Eureka服务器也是Eureka客户端,并且需要(至少一个)服务URL来定位对等端。如果您不提供该服务,该服务将运行并正常工作,但它会给您的日志带来很多无法注册的噪音。

3.1、单机模式

前几节说的就是单机模式

server:
port: 8761 eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

3.2、高可用

  通过运行多个实例并要求它们相互注册,Eureka可以变得更加灵活和可用。事实上,这是默认的行为,所以你需要做的只是为对等体添加一个有效的serviceUrl。

application.yml (Two Peer Aware Eureka Servers). 

---
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2/eureka/ ---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1/eureka/

示例:

配置启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaHaApplication {
public static void main(String[] args) {
// SpringApplication.run(EurekaApplication.class, args);
// 读取控制台输入,决定使用哪个profiles
System.out.println("输入配置:");
Scanner scan = new Scanner(System.in);
String profiles = scan.nextLine();
new SpringApplicationBuilder(EurekaHaApplication.class).profiles(profiles).run(args);
}
}

application.yml配置文件:

spring:
application:
name: EUREKA-HA
---
# 启动类配置启动哪个
server:
port: 8761
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ ---
server:
port: 8762
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/ ---
server:
port: 8763
spring:
profiles: peer3
eureka:
instance:
hostname: peer3
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

实际启动时,配置文件中用三个”-“分隔两种配置即可,三次分别输入:peer1,peer2,peer3,便可分别按照配置启动。

服务提供者配置其中任何一个集群节点即可,建议多配置两个

eureka:
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

3.3、实例

示例一、单例不使用security

示例二、单例使用security

示例三、集群HA不使用security

示例四、集群HA使用security

  参看地址:https://github.com/bjlhx15/spring-cloud-base.git

3.4、注意事项

  1、集群时:eureka.client.serviceUrl.defaultZone配置项的地址,不能使用localhost,要使用域名,DNS解析请自行配置【配置host】。

  2、集群时:spring.application.name 要一致,多个应用

  3、一下配置

# 单点注册中心的时候,将这两个配置项设为false,分布式注册中心true
# eureka.client.registerWithEureka :表示是否将自己注册到Eureka Server,默认为true。
# 由于当前这个应用就是Eureka Server,故而设为false
# eureka.client.fetchRegistry :表示是否从Eureka Server获取注册信息,默认为true。
# 因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。
# eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。
# 默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

  4、实例名

# ha 、区别配置 同 defaultZone一致
eureka.instance.hostname=peer2

  5、ip设置【集群可用性有问题】

# ha 、去掉下面这个参数或者改为false
eureka.instance.preferIpAddress=false

0407-服务注册与发现-Eureka深入理解-元数据、高可用HA的更多相关文章

  1. Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】

    Spring Cloud(二):服务注册与发现 Eureka[Finchley 版]  发表于 2018-04-15 |  更新于 2018-05-07 |  上一篇主要介绍了相关理论,这一篇开始我们 ...

  2. spring cloud 学习之 服务注册和发现(Eureka)

    一:服务注册和发现(Eureka) 1:采用Eureka作为服务注册和发现组件 2:Eureka 项目中 主要在启动类加上 注解@EnableEurekaServer @SpringBootAppli ...

  3. 小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战

    笔记 5.服务注册和发现Eureka Server搭建实战     简介:使用IDEA搭建Eureka服务中心Server端并启动,项目基本骨架介绍          官方文档:http://clou ...

  4. 服务注册发现Eureka之二:高可用服务注册中心

    前言 在Spring Cloud系列文章的开始,我们就介绍了服务注册与发现,其中,主要演示了如何构建和启动服务注册中心Eureka Server,以及如何将服务注册到Eureka Server中,但是 ...

  5. 白话SpringCloud | 第三章:服务注册与发现(Eureka)-下

    前言 上一章节,讲解了在单机模式下的服务注册与发现的相关知识点及简单示例.而在实际生产或者在这种微服务架构的分布式环境中,需要考虑发生故障时,各组件的高可用.而其实高可用,我的简单粗俗理解就是,通过系 ...

  6. 白话SpringCloud | 第二章:服务注册与发现(Eureka)-上

    前言 从本章节开始,正式进入SpringCloud的基础教程.从第一章<什么是SpringCloud>中我们可以知道,一个微服务框架覆盖的东西是很多的,而如何去管理这些服务或者说API接口 ...

  7. SpringCloud(二)- 服务注册与发现Eureka

    离上一篇微服务的基本概念已经过去了几个月,在写那篇博客之前,自己还并未真正的使用微服务架构,很多理解还存在概念上.后面换了公司,新公司既用了SpringCloud也用了Dubbo+Zookeeper, ...

  8. 服务注册与发现—Eureka

    一:Eureka简介 Eureka的意思是(因找到某物,尤指问题的答案而高兴) 我发现了,我找到了,作为一个服务注册和发现中心的名字确实很贴切啊. Eureka包含两个组件,Eureka Server ...

  9. 微服务之服务注册与发现--Eureka(附代码)

    该贴为入门贴,看完可快速知道服务注册与发现是什么?怎么用?至于深入的内容不在此篇文章所述之内,请自行百度. 内容来自:https://blog.csdn.net/nanbiebao6522/artic ...

随机推荐

  1. js模块化规范AMD、CMD、CommonJS...

    1. AMD 1.1 什么是AMD? AMD 英文名 Asynchronous Module Definition ,中文名 异步模块定义 .这是一个浏览器模块化开发的规范. 由于浏览器环境执行环境的 ...

  2. hdu 1042 N! java大数及判断文件末尾

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submi ...

  3. iOS 解决xcode设置全局断点后 执行视频播放时自动进入断点cxa_throw

    iOS中遇到报错,然后断点停留在了libc++abi.dylib`__cxa_throw:里面,这是因为C++文件异常,一般直接点击下一个断点就能跳过去,然后项目还是继续可以运行. 解决方案 右键编辑 ...

  4. invalid comparison: java.util.ArrayList and java.lang.String——bug解决办法

    今天碰到个问题,解决了很久才搞定,来记录下,希望可以帮助到大家 贴错误源码: 这是一个根据list集合的查找数据的 sql,在接收list的时候加了判断 list != ‘ ’ “”,引起了集合与St ...

  5. Qt之模式、非模式对话框

    关于“模式”和“非模式”对话框,相信大家都比较熟悉,但其中有一个可能很多人都比较陌生,介于两者之间的状态,我们称之为“半模式“. 模式对话框 描述 阻塞同一应用程序中其它可视窗口输入的对话框.模式对话 ...

  6. win下如何查看那个网络端口被那个应用程序使用

    在运行里面键入cmd打开命令行窗口.     在命令行窗口键入命令: netstat -ano 第一和第二列是自己网络的端口和外网连接的端口,pid:(全称Process Identification ...

  7. 说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用

    说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用 解答:Spring 核心容器(Core)提供Spring框架的基本功能.核心容器的主要组件是BeanFactory,它是工厂模式的 ...

  8. GL 纹理 格式 资料备份

    分别转载至:http://www.tuicool.com/articles/qAbYfq    和 http://www.verydemo.com/demo_c161_i114362.html 在手机 ...

  9. bat脚本中timeStamp解决方案

    之前做了个工具包,用了timeStamp做文件名. 一般来说最简单的代码类似于: set timeStamp=%date:/=-%_%time% echo %timeStamp% >2018-0 ...

  10. 【BZOJ4499】线性函数 线段树

    [BZOJ4499]线性函数 Description 小C最近在学习线性函数,线性函数可以表示为:f(x) = kx + b.现在小C面前有n个线性函数fi(x)=kix+bi ,他对这n个线性函数执 ...