likes
comments
collection
share

Eureka 客户端服务实战

作者站长头像
站长
· 阅读数 17

daEureka 核心功能就是服务注册与发现,Eureka 官方架构

Eureka 客户端服务实战

上面的架构描述了 Eureka 的部署方式,这也是常用的运行方式。该架构中需要知道的几个核心概念:

  • Register(服务注册) 任何想参与服务注册发现的实例,首先需要向Eureka服务器注册自己信息,注册在第一次心跳发生时提交

  • Renew(服务续租) Eureka客户端服务需要每30秒发送一次心跳来续租,通知Eureka服务当前客户端服务仍然是活动的。如果Eureka服务在90秒内没有看到更新信息,便会将客户端服务从其注册表中删除。注册信息和续订信息被复制到集群中的所有Eureka节点

  • Cancel(服务下线) Eureka客户端服务在关闭时向Eureka服务发送取消请求。Eureka服务将会把实例从注册表中删除

  • Get Registry(拉取服务列表) Eureka客户端服务从Eureka服务获取注册表信息并将其缓存在本地。然后客户端服务使用这些信息来查找其他服务以便于发起远程调用。

一、如何向Eureka集群注册服务

上一篇笔记 Eureka高可用服务集群搭建 中记录了集群搭建方法。在此基础上来说明如何向集群中注册一个服务提供者 provider

1. 项目结构

Eureka 客户端服务实战

  • 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 客户端服务实战

二、Eureka服务信息API

这里重点说明几个常用的API接口,需要更多详细接口可参考官方文档:Eureka REST operations

1. 查看注册的所有服务信息

get请求: ek1.com:7901/eureka/apps

Eureka 客户端服务实战

2. 查看注册的的具体的服务信息

get请求: {ip:port}/eureka/apps/{spring.application.name}/{instanceId} 例如:ek1.com:7901/eureka/apps…

Eureka 客户端服务实战

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 ActuatorSpring 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=*

这样能够看到更多的监控指标,实际开发中不建议这么做,除非你做了安全鉴权

Eureka 客户端服务实战