SpringCloud微服务之网关zuul

SpringCloud微服务之网关zuul

网关在微服务中起着至关重要的作用,而且是所有服务只有网关是在公网暴露的。服务鉴权,服务路由等功能都是放在网关中做的。
本文有两个目的:

1)搭建zuul网关,路由服务案例跑通。
2)使用zuul的两个注意事项:

2.1)http头信息丢失
2.2)客户端请求拿着(比如token)传递到zuul之后,如何将登陆信息传递给后端服务

pom文件

<!--discovery eureka client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

zuul网关也是一个eureka的client,所以这里同样要引入eureka-client依赖。

启动类

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class OpenRestyZuulApplication {

    public static void main(String[] args) {

        SpringApplication.run(OpenRestyZuulApplication.class);
    }
}

就是一个@EnableZuulProxy 注解。

application.yml配置文件

server:
  port: 8021
spring:
  profiles:
    active: local
  application:
    name: micro-tpl-zuul-openresty
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka
#服务路由部分      
zuul:
  routes:
    api-login:
      path: /api-login/**
      serviceId: micro-tpl-login
    api-consumer:
      path: /api-consumer/**
      serviceId: micro-tpl-consumer

启动注册到网关
这里写图片描述
服务自动注册到eureka中。

我们让请求经过网关zuul,请求地址加上前缀api-consumer,zuul路由到mickr-tpl-consumer中获取执行结果。

地址栏:http://localhost:8021/api-consumer/consumer/hi/zhangsan
结果:你好:zhangsan
zuul的路由就正确的获取到了服务返回的结果。

zuul如何将用户信息传递到后端

zuul路由的部分不打算在这里铺开来讲,上面的zuul.routes就是路由的信息
将以/api-login/**开头的请求,路由到micro-tpl-login的服务中,其实本身发送了一个rest请求而已(跨进程了,ThreadLocal< User>不能再两个进程中传递,它是线程级别的
zuul
zuul的pre类型的filter能根据token去redis中验证登录信息,如何将登陆信息传递到真正的micro-tpl-login服务提,上图已经给出了答案。

猜你喜欢

转载自blog.csdn.net/mayongzhan_csdn/article/details/81202337