【问题标题】:Spring Cloud Canary DeploymentSpring Cloud Canary 部署
【发布时间】:2019-07-08 07:01:21
【问题描述】:

我有一个 Spring Cloud 微服务,Zuul 在 docker 上运行。

要求:

我想创建具有特定要求的金丝雀部署,因为我们将有 x 个客户端,并且我想使用 y 个特定客户端(使用电子邮件或用户名)进行金丝雀测试。

我可以配置网关为这些客户端将请求路由到新版本的微服务吗?

【问题讨论】:

  • 确定你能做到,我认为zuul中的路由你必须为客户端配置路径和service_id并做你想做的事情,它将所有请求路由到或者你可以用zuulfilter做到这一点是检查请求标头来自哪里并路由到你想要的地方

标签: spring-boot docker netflix-zuul canary-deployment


【解决方案1】:

所以你可以通过配置或动态路由来做到这一点,但我认为第一个 idom 不适用于通用部分,每个客户端你必须一次又一次地定义它,但第二个更好

@Component
public class PostFilter extends ZuulFilter {

    private static final String REQUEST_PATH = "/special-customer-product-request-url";
    private static final String TARGET_SERVICE = "special-customer-service";
    private static final String HTTP_METHOD = "POST or GET";

    private final DiscoveryClient discoveryClient;

    public PostOrdersFilter(DiscoveryClient discoveryClient) {
        this.discoveryClient = discoveryClient;
    }

    @Override
    public String filterType() {
        return "route";
    }

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

    @Override
    public boolean shouldFilter() {
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        String method = request.getMethod();
        String requestURI = request.getRequestURI();
        return HTTP_METHOD.equalsIgnoreCase(method) && requestURI.startsWith(REQUEST_PATH);
    }

    @Override
    public Object run() {

        RequestContext context = RequestContext.getCurrentContext();
        List<ServiceInstance> instances = discoveryClient.getInstances(TARGET_SERVICE);
        try {
            if (instances != null && instances.size() > 0) {
                context.setRouteHost(instances.get(0).getUri().toURL());
            } else {
                throw new IllegalStateException("Target service instance not found!");
            }
        } catch (Exception e) {
            throw new IllegalArgumentException("Couldn't get service URL!", e);
        }
        return null;
    }
}

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2017-07-21
    • 2020-03-04
    • 2018-07-31
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多