Eureka 客户端服务实战
daEureka
核心功能就是服务注册与发现,Eureka
官方架构
上面的架构描述了 Eureka 的部署方式,这也是常用的运行方式。该架构中需要知道的几个核心概念:
-
Register(服务注册) 任何想参与服务注册发现的实例,首先需要向
Eureka
服务器注册自己信息,注册在第一次心跳发生时提交 -
Renew(服务续租)
Eureka
客户端服务需要每30秒发送一次心跳来续租,通知Eureka
服务当前客户端服务仍然是活动的。如果Eureka
服务在90秒内没有看到更新信息,便会将客户端服务从其注册表中删除。注册信息和续订信息被复制到集群中的所有Eureka
节点 -
Cancel(服务下线)
Eureka
客户端服务在关闭时向Eureka
服务发送取消请求。Eureka
服务将会把实例从注册表中删除 -
Get Registry(拉取服务列表)
Eureka
客户端服务从Eureka
服务获取注册表信息并将其缓存在本地。然后客户端服务使用这些信息来查找其他服务以便于发起远程调用。
一、如何向Eureka
集群注册服务
上一篇笔记 Eureka
高可用服务集群搭建 中记录了集群搭建方法。在此基础上来说明如何向集群中注册一个服务提供者 provider
1. 项目结构
pom.xml
配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.14</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>user-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>8</java.version>
<spring-cloud.version>2021.0.7</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 服务配置
application.properties
配置
server.port=8081
#
# 注册中心
eureka.client.service-url.defaultZone=http://ek1.com:7901/eureka/
#
# 指定当前客户端服务在注册中心的名称
eureka.instance.instance-id=user-provider-8081
#
# 服务名称
spring.application.name=user-provider
3. 启动服务
服务启动后,可到Eureka
注册中心(ek1.com:7901/) 中查看服务是否注册上了
二、Eureka
服务信息API
这里重点说明几个常用的API接口,需要更多详细接口可参考官方文档:Eureka REST operations
1. 查看注册的所有服务信息
get请求: ek1.com:7901/eureka/apps
2. 查看注册的的具体的服务信息
get请求: {ip:port}/eureka/apps/{spring.application.name}/{instanceId} 例如:ek1.com:7901/eureka/apps…
3. 服务续约
put请求:{ip:port}/eureka/apps/{spring.application.name}/{instanceId}?lastDirtyTimestamp={}&status=up
4. 更改服务状态
put请求:{ip:port}/eureka/apps/{spring.application.name}/{instanceId}/status?lastDirtyTimestamp={}&value={UP/DOWN}
5. 删除状态更新
delete请求:{ip:port}/eureka/apps/{spring.application.name}/{instanceId}/status?lastDirtyTimestamp={}&value={UP/DOWN}
6. 删除服务
delete请求:{ip:port}/eureka/apps/{spring.application.name}/{instanceId}
三、 Spring Boot Actuator 监控
Spring Boot Actuator
是 Spring Boot
的子项目。它使用 HTTP 端点来公开有关任何正在运行的应用程序的操作信息。使用该库的主要好处是我们可以从生产就绪的应用程序中获取运行状况和监控指标。当然,我们也需要对这些公开的信息进行鉴权,避免暴露重要信息,可参考 Spring Boot Actuator如何进行安全鉴权 这篇博文。
1. pom.xml
中引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
加人配置后启动应用程序,然后通过 http://localhost:8081/actuator
访问,可返回如下结果:
{
"_links": {
"self": {
"href": "http://localhost:8081/actuator",
"templated": false
},
"health": {
"href": "http://localhost:8081/actuator/health",
"templated": false
},
"health-path": {
"href": "http://localhost:8081/actuator/health/{*path}",
"templated": true
}
}
}
可以看出,默认情况下只开放了 health 端点,如果要开发更多端点,需要进行配置
#开启所有端点
management.endpoints.web.exposure.include=*
这样能够看到更多的监控指标,实际开发中不建议这么做,除非你做了安全鉴权
转载自:https://juejin.cn/post/7248180884767064122