Spring Cloud 微服务中 gateway 网关如何设置健康检测端点

主要是为了让 k8s 识别到网关项目已经就绪,但是又不想在里面通过 Controller 实现。因为在 Controller 中这样做并不是最佳实践,因为 Gateway 的设计初衷是专注于路由和过滤,而不是业务逻辑的处理。

Gateway 中配置健康检查端点可以通过以下方式进行(可根据实际需求进行扩展):

1. 自定义路由配置(推荐)

可以使用 Spring Cloud Gateway 的 Java DSL 配置自定义的路由,以在网关中添加一个专门用于健康检查的路由。例如:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.ServerResponse;

import static org.springframework.web.reactive.function.server.RequestPredicates.*;

@Configuration
public class GatewayConfig {

    @Bean
    public RouterFunction<ServerResponse> healthCheckRoute() {
        return route(GET("/health-check"),
                request -> ServerResponse.status(HttpStatus.OK)
                        .body(BodyInserters.fromValue("Gateway is healthy")));
    }
}

这样,就可以通过访问 http://localhost:8080/health-check 来执行健康检查。

上面代码的描述说明:

  • route 方法是 Spring Cloud Gateway 提供的 Java DSL(领域特定语言,Domain-Specific Language)中的一部分。这是一种声明性的路由配置方式,允许使用流畅的 API 配置路由规则。
  • GatewayConfig 类中,healthCheckRoute 方法返回一个 RouterFunction<ServerResponse>,这个函数式接口是用来配置路由规则的。route 方法是用于创建路由规则的,它接收一个请求谓词(RequestPredicate)和一个处理函数(HandlerFunction)作为参数。
  • 具体来说,route(GET("/health-check"), ...) 表示创建一个满足 GET 请求谓词,并且路径为 /health-check 的路由规则。接着,通过 ServerResponse 构建响应,这里设置为 HTTP 状态码 HttpStatus.OK,并返回一条消息 “Gateway is healthy”。

这种方式更加直观和类型安全,相比于配置文件,可以在代码中清晰地看到路由规则的定义。这是 Spring WebFlux 框架提供的一种路由方式,用于构建响应式的、非阻塞的 Web 应用程序。

2. 利用 Actuator 健康检查

可以通过配置属性来启用 Actuator,并将其端口设置为用于健康检查的端口。

要想使用 Actuator,项目中需要引入 Actuator 的依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

application.propertiesapplication.yml 配置文件中添加以下配置:

# application.properties
management.endpoints.web.exposure.include=health
management.server.port=8081  # 可与 server.port 相同或不同

或者

# application.yaml
management:
  endpoints:
    web:
      exposure:
        include: health
  server:
    port: 8081  # 可与 server.port 相同或不同

上述配置将 Actuator 暴露的端点配置为仅包含 health,并将健康检查端口设置为 8081。此时,可以通过访问 http://localhost:8081/actuator/health 来执行健康检查。

【注】Actuator 中还有其他配置,实际使用过程中建议查看 官方文档 了解相应的配置,以免给自己挖坑。比如 /env/beans,它们可能会泄漏应用程序的敏感信息。确保只在受信任的环境中启用这些端点,并谨慎处理它们的输出。

3. 通过 RestController 实现(不推荐)

如果有业务逻辑需要处理,更推荐将业务逻辑集中在后端微服务中,而将 Gateway 专注于路由和过滤。这样可以更好地保持清晰的代码结构和单一责任原则。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @author roc
 * @date 2024/1/16 14:14
 */
@RestController
@RequestMapping("/health")
public class HealthController {

    @GetMapping("/check")
    public String check() {
        return "Gateway is healthy";
    }
}

如果还有其他方式请大佬们分享一下。

在这里插入图片描述
个人博客:Roc’s Blog

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring Cloud OAuth2 Gateway是基于Spring Cloud GatewaySpring Security OAuth2的网关服务,用于保护和管理微服务的访问权限。它提供了一种统一的认证和授权机制,可以集成多种认证方式,如基于密码、令牌、JWT等的认证方式,同时也支持多种授权方式,如基于角色、权限等的授权方式。通过Spring Cloud OAuth2 Gateway,可以实现微服务的安全访问和管理,提高系统的安全性和可靠性。 ### 回答2: Spring Cloud OAuth2 Gateway 是基于 Spring Cloud 的一种解决方案,用于构建微服务架构下的网关服务。 Spring Cloud OAuth2 Gateway 并不直接处理身份认证和授权,而是作为一个网关服务,负责转发请求和处理反向代理等功能。它集成了 Spring Cloud 的相关组件,比如 Eureka、Ribbon 和 Zuul,通过这些组件的协同作用,可以实现服务的负载均衡、熔断、动态路由等功能。 在 Spring Cloud OAuth2 Gateway ,OAuth2 认证和授权是通过与认证授权服务(通常是 Spring Security OAuth2)进行协作来实现的。当客户端发起请求时,请求会先到达 Gateway,然后 Gateway 会将请求代理到认证授权服务,认证授权服务会对请求进行认证和授权,并返回相应的结果。认证和授权通过后,Gateway 会将请求转发到相应的微服务Spring Cloud OAuth2 Gateway 还提供了可扩展的过滤器机制,可以对请求进行预处理和后处理,比如添加请求头、修改请求内容等。使用过滤器可以实现一些自定义的功能,比如统一鉴权、请求日志记录等。 总结来说,Spring Cloud OAuth2 Gateway 是一个基于 Spring Cloud网关服务,用于处理微服务架构下的请求转发和反向代理。它与认证授权服务协作,实现了 OAuth2 认证和授权的功能,并提供了过滤器机制来增强功能和定制化处理。 ### 回答3: Spring Cloud Gateway 是基于Spring WebFlux 提供的一个路由服务,使用它可以轻松实现网关的搭建和管理,并且支持代理请求、路由转发、请求过滤等功能。同时,也提供了 OAuth2 的集成以实现网关级别的身份认证和授权。 OAuth2 是一种用于开放式授权的协议,它允许用户通过第三方应用或服务来授权访问受限资源。Spring Cloud Gateway OAuth2 插件提供了一种在网关验证和认证用户的方法。 使用 Spring Cloud Gateway OAuth2 插件,可以在网关层面对资源进行保护,只允许通过授权的用户访问受限资源,并且可以根据用户的角色和权限进行进一步的控制。 配置 Spring Cloud Gateway OAuth2 需要以下步骤: 1. 引入相关的依赖,包括 spring-cloud-starter-gatewayspring-security-oauth2。 2. 配置 OAuth2 的认证服务器和资源服务器的信息,包括认证服务器的地址、客户端信息和资源服务器的端点等。 3. 在网关的路由配置,指定需要受保护的路由和相应的过滤器链,例如认证过滤器和授权过滤器。 4. 可以根据需要自定义过滤器,实现一些额外的操作,比如添加请求头、修改请求路径等。 5. 启动网关应用程序。 通过 Spring Cloud Gateway OAuth2 的集成,可以实现网关层面的统一身份认证和权限控制,提高系统的安全性和可扩展性。同时,也简化了微服务的认证和授权配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roc.Chang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值