gateway动态服务名Route配置

需求说明

想做模型部署功能,根据模型的唯一编码注册到nacos并通过gateway调用。因为模型编码是随机生成的,无法提前配置。
如编码为A的模型,在启动时注册到naocs服务名为 predict-A,通过网关对外暴漏路径为/xxx-model/A/

解决方案

自定义PredictFilter,重置Route。

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.route.Route;
import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.net.URI;
@Slf4j
public class PredictFilter implements GatewayFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        String uri = buildUri(exchange.getRequest().getURI());
        log.info("PredictFilter : {}",uri);
        Route route = (Route)exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
        Route newRoute=Route.async()
                .asyncPredicate(route.getPredicate())
                .filters(route.getFilters())
                .id(route.getId())
                .order(route.getOrder())
                .uri(uri).build();
        exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR,newRoute);
        return chain.filter(exchange);
    }


    @Override
    public int getOrder() {
        return 0;
    }

    private String buildUri(URI uri){
        String path = uri.getPath();
        String[] split = path.split("/");
        String serviceName = "predict-" + split[2];
        return "lb://"+serviceName;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置网关(gateway)的具体步骤可能因为不同的网关软件而有所不同,这里我以常见的Nginx和Spring Cloud Gateway为例,简要介绍一下它们的配置方式。 1. Nginx Nginx是一款高性能的Web服务器和反向代理服务器,可以用来作为网关,在路由请求时转发到其他服务。以下是一个简单的Nginx配置示例: ``` http { upstream backend { server backend1.example.com; server backend2.example.com; } server { listen 80; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 在以上配置中,我们定义了一个名为backend的上游服务器群组,其中包含两个后端服务器backend1.example.com和backend2.example.com。然后我们在server块内定义了一个监听80端口的虚拟主机,将所有请求通过proxy_pass指令转发到backend群组中的某个服务器。同时,我们也设置了一些请求头信息,例如Host和X-Real-IP。 2. Spring Cloud Gateway Spring Cloud Gateway是Spring Cloud生态系统中的一员,也是一款网关软件。它可以将请求路由到不同的服务之间,同时还支持负载均衡、限流、熔断等功能。 以下是一个简单的Spring Cloud Gateway配置示例: ``` spring: cloud: gateway: routes: - id: backend-route uri: http://backend.example.com predicates: - Path=/backend/** ``` 在以上配置中,我们定义了一个名为backend-route的路由,将所有以/backend/开头的请求通过uri指定的地址转发到http://backend.example.com。同时,我们也可以添加其他的谓词(predicates)来匹配不同的请求。例如,我们可以添加一个Host谓词来匹配特定的域名,或者添加一个Header谓词来匹配特定的请求头信息。 总之,配置网关的过程需要根据具体的软件和需求来进行,以上只是简单的示例。在实际应用中,我们还需要考虑安全性、可靠性等因素,并且需要进行测试和调试,以确保网关正常工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值