Quarkus响应式路由:如何让兜底路由不拦截健康检查端点?
解决Quarkus兜底路由优先级低于健康检查端点的问题
方案一:调整兜底路由的order值降低优先级
Quarkus中@Route注解的order值越小,路由匹配优先级越高。SmallRye Health的健康检查端点默认使用的order值小于你设置的2,导致兜底路由先捕获了/q/health/*请求。
只需将兜底路由的order设为更大的数值(比如100),让健康检查的内置路由优先匹配:
@Route(path = "/*", order = 100) public void other(RoutingContext rc) { String path = rc.request().path(); Log.warnf("Invalid path '%s' ", path); rc.response().setStatusCode(200) .putHeader(HttpHeaders.CONTENT_TYPE.toString(), "application/json") .end("{\"status\": \"error\"}"); }
方案二:在兜底路由中排除/q/前缀的请求
如果不想依赖order数值,可在兜底路由内判断路径,若属于/q/开头的请求,直接跳过当前路由,交给内置处理器处理:
@Route(path = "/*", order = 2) public void other(RoutingContext rc) { String path = rc.request().path(); // 跳过/q/开头的请求,交给后续路由处理 if (path.startsWith("/q/")) { rc.next(); return; } Log.warnf("Invalid path '%s' ", path); rc.response().setStatusCode(200) .putHeader(HttpHeaders.CONTENT_TYPE.toString(), "application/json") .end("{\"status\": \"error\"}"); }
调用rc.next()会让请求继续匹配后续路由,确保健康检查端点能正常响应。
内容的提问来源于stack exchange,提问作者Jmini
相关产品推荐
相关产品推荐

