spring cloud gateway API zuul配置

zuul是一个路由功能组件,当连上eureka后,可通过url/服务id/api进行服务的调用,例如,原生为http://192.168.2.201:8080/provider/1
使用zuul为http://192.168.2.201:8040/simple-provider/provider/1


zuul配置(path+serviceId)

配置方式一

zuul:
  routes:
    simple-provider: /pro/**
#applicationName 服务重定向到一个新的URL上    

配置方式二

#abcUnique 名称唯一即可
zuul:
  routes:
    abcUnique:
      path: /pro/** 
      serviceId: simple-provider

zuul配置(path+url)

#abcUnique 名称唯一即可
zuul:
  routes:
    abcUnique:
      path: /pro/** 
      url: http://192.168.2.201:8080
#url为服务器的host

zuul配置ribbon负载均衡

zuul:
  routes:
    abcUnique:
      path: /pro/** 
      service-id: simple-provider

simple-provider: #这个ribbon要请求serviceId
  ribbon:
    listOfServers: http://127.0.0.1:8080,http://127.0.0.1:8008   

配完serviceId后,再配ribbon的服务器列表,即可实现负载均衡

zuul配置断路器fallback

为单个路由设置fallback

getRoute 里面就是要配的路由ID

class MyFallbackProvider implements ZuulFallbackProvider {
    @Override
    public String getRoute() {
        return "customers";
    }

    @Override
    public ClientHttpResponse fallbackResponse() {
        return new ClientHttpResponse() {
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK;
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return 200;
            }

            @Override
            public String getStatusText() throws IOException {
                return "OK";
            }

            @Override
            public void close() {

            }

            @Override
            public InputStream getBody() throws IOException {
                return new ByteArrayInputStream("fallback".getBytes());
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON);
                return headers;
            }
        };
    }
}

全局路由设置fallback

其实和单个一样的,只是路由ID设置为通配符

class MyFallbackProvider implements ZuulFallbackProvider {
    @Override
    public String getRoute() {
        return "*";
    }

    @Override
    public ClientHttpResponse fallbackResponse() {
        return new ClientHttpResponse() {
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK;
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return 200;
            }

            @Override
            public String getStatusText() throws IOException {
                return "OK";
            }

            @Override
            public void close() {

            }

            @Override
            public InputStream getBody() throws IOException {
                return new ByteArrayInputStream("fallback".getBytes());
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON);
                return headers;
            }
        };
    }
}

zuul过滤器配置

过滤器原理

这里写图片描述

编写过滤器类

package com.example.demo;

import com.netflix.zuul.ZuulFilter;

public class CustomZuulFilter extends ZuulFilter {

    /**
     * 执行逻辑
     */
    @Override
    public Object run() {
        System.err.println("经过了zuul filter");
        return null;
    }

    /**
     * 返回一个boolean类型来判断该过滤器是否要执行。我们可以通过此方法来指定过滤器的有效范围。
     */
    @Override
    public boolean shouldFilter() {
        // TODO Auto-generated method stub
        return true;
    }

    /**
     * 通过int值来定义过滤器的执行顺序,数值越小优先级越高
     */
    @Override
    public int filterOrder() {
        // TODO Auto-generated method stub
        return 0;
    }

    /**
     * 有三种可以选 pre:可以在请求被路由之前调用。 routing:在路由请求时候被调用。 post:在routing和error过滤器之后被调用。
     * error:处理请求时发生错误时被调用。
     */
    @Override
    public String filterType() {
        // TODO Auto-generated method stub
        return "pre";
    }

}

配置到spring管理

@SpringBootApplication
@EnableZuulProxy
public class MicroserviceGatewayApplication {

    @Bean
    public CustomZuulFilter customZuulFilter() {
        return new CustomZuulFilter();
    }

    public static void main(String[] args) {
        SpringApplication.run(MicroserviceGatewayApplication.class, args);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值