0407-服务注册与发现-Eureka深入理解-元数据、高可用HA
一、Eureka元数据
了解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的更多相关文章
- Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】
Spring Cloud(二):服务注册与发现 Eureka[Finchley 版] 发表于 2018-04-15 | 更新于 2018-05-07 | 上一篇主要介绍了相关理论,这一篇开始我们 ...
- spring cloud 学习之 服务注册和发现(Eureka)
一:服务注册和发现(Eureka) 1:采用Eureka作为服务注册和发现组件 2:Eureka 项目中 主要在启动类加上 注解@EnableEurekaServer @SpringBootAppli ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战
笔记 5.服务注册和发现Eureka Server搭建实战 简介:使用IDEA搭建Eureka服务中心Server端并启动,项目基本骨架介绍 官方文档:http://clou ...
- 服务注册发现Eureka之二:高可用服务注册中心
前言 在Spring Cloud系列文章的开始,我们就介绍了服务注册与发现,其中,主要演示了如何构建和启动服务注册中心Eureka Server,以及如何将服务注册到Eureka Server中,但是 ...
- 白话SpringCloud | 第三章:服务注册与发现(Eureka)-下
前言 上一章节,讲解了在单机模式下的服务注册与发现的相关知识点及简单示例.而在实际生产或者在这种微服务架构的分布式环境中,需要考虑发生故障时,各组件的高可用.而其实高可用,我的简单粗俗理解就是,通过系 ...
- 白话SpringCloud | 第二章:服务注册与发现(Eureka)-上
前言 从本章节开始,正式进入SpringCloud的基础教程.从第一章<什么是SpringCloud>中我们可以知道,一个微服务框架覆盖的东西是很多的,而如何去管理这些服务或者说API接口 ...
- SpringCloud(二)- 服务注册与发现Eureka
离上一篇微服务的基本概念已经过去了几个月,在写那篇博客之前,自己还并未真正的使用微服务架构,很多理解还存在概念上.后面换了公司,新公司既用了SpringCloud也用了Dubbo+Zookeeper, ...
- 服务注册与发现—Eureka
一:Eureka简介 Eureka的意思是(因找到某物,尤指问题的答案而高兴) 我发现了,我找到了,作为一个服务注册和发现中心的名字确实很贴切啊. Eureka包含两个组件,Eureka Server ...
- 微服务之服务注册与发现--Eureka(附代码)
该贴为入门贴,看完可快速知道服务注册与发现是什么?怎么用?至于深入的内容不在此篇文章所述之内,请自行百度. 内容来自:https://blog.csdn.net/nanbiebao6522/artic ...
随机推荐
- js模块化规范AMD、CMD、CommonJS...
1. AMD 1.1 什么是AMD? AMD 英文名 Asynchronous Module Definition ,中文名 异步模块定义 .这是一个浏览器模块化开发的规范. 由于浏览器环境执行环境的 ...
- hdu 1042 N! java大数及判断文件末尾
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submi ...
- iOS 解决xcode设置全局断点后 执行视频播放时自动进入断点cxa_throw
iOS中遇到报错,然后断点停留在了libc++abi.dylib`__cxa_throw:里面,这是因为C++文件异常,一般直接点击下一个断点就能跳过去,然后项目还是继续可以运行. 解决方案 右键编辑 ...
- invalid comparison: java.util.ArrayList and java.lang.String——bug解决办法
今天碰到个问题,解决了很久才搞定,来记录下,希望可以帮助到大家 贴错误源码: 这是一个根据list集合的查找数据的 sql,在接收list的时候加了判断 list != ‘ ’ “”,引起了集合与St ...
- Qt之模式、非模式对话框
关于“模式”和“非模式”对话框,相信大家都比较熟悉,但其中有一个可能很多人都比较陌生,介于两者之间的状态,我们称之为“半模式“. 模式对话框 描述 阻塞同一应用程序中其它可视窗口输入的对话框.模式对话 ...
- win下如何查看那个网络端口被那个应用程序使用
在运行里面键入cmd打开命令行窗口. 在命令行窗口键入命令: netstat -ano 第一和第二列是自己网络的端口和外网连接的端口,pid:(全称Process Identification ...
- 说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用
说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用 解答:Spring 核心容器(Core)提供Spring框架的基本功能.核心容器的主要组件是BeanFactory,它是工厂模式的 ...
- GL 纹理 格式 资料备份
分别转载至:http://www.tuicool.com/articles/qAbYfq 和 http://www.verydemo.com/demo_c161_i114362.html 在手机 ...
- bat脚本中timeStamp解决方案
之前做了个工具包,用了timeStamp做文件名. 一般来说最简单的代码类似于: set timeStamp=%date:/=-%_%time% echo %timeStamp% >2018-0 ...
- 【BZOJ4499】线性函数 线段树
[BZOJ4499]线性函数 Description 小C最近在学习线性函数,线性函数可以表示为:f(x) = kx + b.现在小C面前有n个线性函数fi(x)=kix+bi ,他对这n个线性函数执 ...