我正在使用 Spring Boot 和 Spring Cloud 的微服务架构开发一个应用程序。在此应用程序中,我想使用 API Gateway 和 Eureka 来启用动态路由。我的主要要求如下:
API网关中的动态路由:API网关应将传入请求动态路由到在Eureka中注册的服务。我不想静态定义服务名称或地址;路由应该是动态的。
包含租户信息的 JWT 身份验证:用户将使用 JWT 令牌登录,其中包含租户信息。我想根据这个租户信息更新请求的目标服务。
我使用“test-tenantId”格式在 Eureka 中注册我的服务,并希望路由与此格式保持一致。将来,可能会有多个名为 test-tenant1、test-tenant2、...、test-tenantN 的服务。因此,我计划仅将更新应用于以 /test 开头的请求,而其他请求应根据 Eureka 的默认路由按原样路由。
我有两个具体的路由场景:
场景一:当收到 /user/{id} 这样的请求时,应该直接路由到 Eureka 中注册的名为 user 的服务。 场景2:当收到像/test/{page}这样的请求时,我想根据JWT令牌中提供的租户信息将此请求修改为/test-{tenantId}/{page}。例如,如果令牌中的租户是tenant1,则请求应路由到/test-tenant1/{page}。 如何使用 API Gateway 和 Eureka 来实现这种动态路由和 URL 修改?您能提供示例结构或代码吗?
我找到了
exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_PREDICATE_MATCHED_PATH_ATTR, newServiceName);
exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_PREDICATE_PATH_CONTAINER_ATTR, newServicePath);
exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, newUri);