Eureka
目的
通过这个服务来看eureka注册中心的效果。
复习Spring Boot。
减少了大量配置。快速开发。
用Starter集成一个新框架。比如redis,web等。添加依赖,加配置文件。
嵌入式服务器,令开发和部署变的方便。
Spring Boot介绍:
https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/
代码步骤
- pom.xml
- application.yml
- java代码
看代码。
服务注册与发现
Eureka 单节点搭建
-
pom.xml
org.springframework.cloud spring-cloud-starter-netflix-eureka-server -
application.yml
eureka: client: #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息 register-with-eureka: false #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false fetch-registry: false #设置服务注册中心的URL,用于client和server端交流 service-url: defaultZone: http://localhost:7900/eureka/
-
application.properties
#是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息 eureka.client.register-with-eureka=false #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false eureka.client.fetch-registry=false #设置服务注册中心的URL,用于client和server端交流 eureka.client.service-url.defaultZone=http://localhost:7900/eureka/
-
代码
启动类上添加此注解标识该服务为配置中心 @EnableEurekaServer
PS:Eureka会暴露一些端点。端点用于Eureka Client注册自身,获取注册表,发送心跳。
简单看一下eureka server控制台,实例信息区,运行环境信息区,Eureka Server自身信息区。
Eureka 介绍
整体介绍
- 背景:在传统应用中,组件之间的调用,通过有规范的约束的接口来实现,从而实现不同模块间良好的协作。但是被拆分成微服务后,每个微服务实例的网络地址都可能动态变化,数量也会变化,使得原来硬编码的地址失去了作用。需要一个中心化的组件来进行服务的登记和管理。
- 概念:实现服务治理,即管理所有的服务信息和状态。
注册中心相当于买票乘车,只看有没有票(有没有服务),有就去买票(获取注册列表),然后乘车(调用)。不必关心有多少火车在运行。
注册中心好处:不用关心有多少提供方。
注册中心有哪些:Eureka,Nacos,Consul,Zookeeper等。
-
服务注册与发现包括两部分,一个是服务器端,另一个是客户端。
Server是一个公共服务,为Client提供服务注册和发现的功能,维护注册到自身的Client的相关信息,同时提供接口给Client获取注册表中其他服务的信息,使得动态变化的Client能够进行服务间的相互调用。
Client将自己的服务信息通过一定的方式登记到Server上,并在正常范围内维护自己信息一致性,方便其他服务发现自己,同时可以通过Server获取到自己依赖的其他服务信息,完成服务调用,还内置了负载均衡器,用来进行基本的负载均衡。
我们的Spring Cloud是用Eureka作为服务注册中心。
Eureka:是一个RESTful风格的服务,是一个用于服务发现和注册的基础组件,是搭建Spring Cloud微服务的前提之一,它屏蔽了Server和client的交互细节,使得开发者将精力放到业务上。
serverA从serverB同步信息,则serverB是serverA的peer。
上面例子中如果service-url为空,且register-with-eureka,fetch-registry为true,则会报错,Cannot execute request on any known server,因为server同时也是一个client,他会尝试注册自己,所以要有一个注册中心url去注册。
-
Netflix开源的组件。包括server和client两部分。
https://github.com/Netflix/Eureka
注册中心和微服务间的关系
《服务注册与发现关系图》
client功能
- 注册:每个微服务启动时,将自己的网络地址等信息注册到注册中心,注册中心会存储(内存中)这些信息。
- 获取服务注册表:服务消费者从注册中心,查询服务提供者的网络地址,并使用该地址调用服务提供者,为了避免每次都查注册表信息,所以client会定时去server拉取注册表信息到缓存到client本地。
- 心跳:各个微服务与注册中心通过某种机制(心跳)通信,若注册中心长时间和服务间没有通信,就会注销该实例。
- 调用:实际的服务调用,通过注册表,解析服务名和具体地址的对应关系,找到具体服务的地址,进行实际调用。
server注册中心功能
-
服务注册表:记录各个微服务信息,例如服务名称,ip,端口等。
注册表提供 查询API(查询可用的微服务实例)和管理API(用于服务的注册和注销)。
服务注册与发现:注册:将微服务信息注册到注册中心。发现:查询可用微服务列表及其网络地址。
服务检查:定时检测已注册的服务,如发现某实例长时间无法访问,就从注册表中移除。
组件:Eureka , Consul , ZooKeeper,nacos等。
服务注册
例子:api-listen-order
- pom.xml
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
- application.yml
#注册中心
eureka:
client:
#设置服务注册中心的URL
service-url:
defaultZone: http://root:root@localhost:7900/eureka/
ps:不想注册,设置成false即可,实例演示结果:注册中心没有实例信息。找控制台204信息也没有找到。
spring:
cloud:
service-registry:
auto-registration:
enabled: false
注册成功:
DiscoveryClient_API-LISTEN-ORDER/api-listen-order:30.136.133.9:port - registration status: 204
后面源码讲手动注册。
PS:
Eureka Server与Eureka Client之间的联系主要通过心跳的方式实现。心跳(Heartbeat)即Eureka Client定时向Eureka Server汇报本服务实例当前的状态,维护本服务实例在注册表中租约的有效性。
Eureka Client将定时从Eureka Server中拉取注册表中的信息,并将这些信息缓存到本地,用于服务发现。
服务调用
Eureka高可用
高可用:可以通过运行多个Eureka server实例并相互注册的方式实现。Server节点之间会彼此增量地同步信息,从而确保节点中数据一致。
搭建步骤
1.准备
准备2个节点部署eureka,也可以单机部署
修改本机host文件,绑定一个主机名,单机部署时使用ip地址会有问题
2.配置文件
节点 1:
#是否将自己注册到其他Eureka Server,默认为true 需要
eureka.client.register-with-eureka=true
#是否从eureka server获取注册信息, 需要
eureka.client.fetch-registry=true
#设置服务注册中心的URL,用于client和server端交流
#此节点应向其他节点发起请求
eureka.client.serviceUrl.defaultZone=http://ek2.com:7902/eureka/
#主机名,必填
eureka.instance.hostname=ek1.com
management.endpoint.shutdown.enabled=true
#web端口,服务是由这个端口处理rest请求的
server.port=7901
节点 2:
#是否将自己注册到其他Eureka Server,默认为true 需要
eureka.client.register-with-eureka=true
#是否从eureka server获取注册信息, 需要
eureka.client.fetch-registry=true
#设置服务注册中心的URL,用于client和server端交流
#此节点应向其他节点发起请求
eureka.client.serviceUrl.defaultZone=http://ek1.com:7902/eureka/
#主机名,必填
eureka.instance.hostname=ek2.com
management.endpoint.shutdown.enabled=true
#web端口,服务是由这个端口处理rest请求的
server.port=7902
使用Spring Boot2.x Actuator监控应用
开启监控
org.springframework.boot
spring-boot-starter-actuator
默认端点
Spring Boot 2.0 的Actuator只暴露了health和info端点,提供的监控信息无法满足我们的需求
在1.x中有n多可供我们监控的节点,官方的回答是为了安全….
开启所有端点
在application.yml中加入如下配置信息
*代表所有节点都加载
#开启所有端点
management.endpoints.web.exposure.include=*
所有端点都开启后的api列表
{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},"archaius":{"href":"http://localhost:8080/actuator/archaius","templated":false},"beans":{"href":"http://localhost:8080/actuator/beans","templated":false},"caches-cache":{"href":"http://localhost:8080/actuator/caches/{cache}","templated":true},"caches":{"href":"http://localhost:8080/actuator/caches","templated":false},"health":{"href":"http://localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/health/{*path}","templated":true},"info":{"href":"http://localhost:8080/actuator/info","templated":false},"conditions":{"href":"http://localhost:8080/actuator/conditions","templated":false},"configprops":{"href":"http://localhost:8080/actuator/configprops","templated":false},"env":{"href":"http://localhost:8080/actuator/env","templated":false},"env-toMatch":{"href":"http://localhost:8080/actuator/env/{toMatch}","templated":true},"loggers":{"href":"http://localhost:8080/actuator/loggers","templated":false},"loggers-name":{"href":"http://localhost:8080/actuator/loggers/{name}","templated":true},"heapdump":{"href":"http://localhost:8080/actuator/heapdump","templated":false},"threaddump":{"href":"http://localhost:8080/actuator/threaddump","templated":false},"metrics":{"href":"http://localhost:8080/actuator/metrics","templated":false},"metrics-requiredMetricName":{"href":"http://localhost:8080/actuator/metrics/{requiredMetricName}","templated":true},"scheduledtasks":{"href":"http://localhost:8080/actuator/scheduledtasks","templated":false},"mappings":{"href":"http://localhost:8080/actuator/mappings","templated":false},"refresh":{"href":"http://localhost:8080/actuator/refresh","templated":false},"features":{"href":"http://localhost:8080/actuator/features","templated":false},"service-registry":{"href":"http://localhost:8080/actuator/service-registry","templated":false}}}
api端点功能
Health
会显示系统状态
{"status":"UP"}
shutdown
用来关闭节点
开启远程关闭功能
management.endpoint.shutdown.enabled=true
使用Post方式请求端点
{
"message": "Shutting down, bye..."
}
autoconfig
获取应用的自动化配置报告
beans
获取应用上下文中创建的所有Bean
configprops
获取应用中配置的属性信息报告
env
获取应用所有可用的环境属性报告
Mappings
获取应用所有Spring Web的控制器映射关系报告
info
获取应用自定义的信息
metrics
返回应用的各类重要度量指标信息
Metrics节点并没有返回全量信息,我们可以通过不同的key去加载我们想要的值
metrics/jvm.memory.max
Threaddump
1.x中为dump
返回程序运行中的线程信息