springcloud--zuul 网关

路由转发

创建项目,zuul需要注册进eureka中,所以pom依赖中要加这两个依赖

<!-- zuul路由网关 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>

启动类上添加@EnableZuulProxy注解,启用zuul,

最后在配置文件中将zuul项目注册到eureka中心,

eureka:
  client: #客户端注册进eureka服务列表内
    service-url: 
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/      
  instance:
    instance-id: microservicecloud-zuul-gateway 
    prefer-ip-address: true     #访问路径可以显示IP地址

#注册到Eureka服务的服务名
spring:
  application:
    name: zuul-service7103

zuul:
  routes:
    client-a:
      path: /client-a/**
      serviceId: EUREKA-CLIENT  #这里是写其他实例注册到Eureka的名称,不会写各实例的instanceId
    clietn-b:
      path: /client-b/**
      serviceId: eurake-client1-7003

最后,启动eureka,启动服务提供者,zuul项目,不通过网关访问

http://localhost:8001/dept/get/1,可以直接访问,

通过网关:http://localhost:9003/client-a/getData

zuul会把/client-a/开头的请求都转发到EUREKA-CLIENT服务,并且,zuul默认是使用了ribbon负载均衡。

服务过滤

 zuul还可以过滤请求,做一些安全验证

需要创建一个类继承ZuulFilter,重写其中的方法

@Component
public class MyFilter extends ZuulFilter {

    /**
     * 返回一个字符串的过滤器类型,有以下四种
     * pre: 路由之前
     * routing:路由时
     * post:路由之后
     * error: 发送错误调用
     *
     * @return
     */
    @Override
    public String filterType() {
        return null;
    }

    /**
     * 过滤顺序,返回的数据越小,该过滤器优先生效,优先过滤请求
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 是否需要启用该过滤器,可以按情况是否启用
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return false;
    }

    /**
     * 这里写过滤器的过滤逻辑
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/zgq_hw/article/details/84479267