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的pre类型的filter能根据token去redis中验证登录信息,如何将登陆信息传递到真正的micro-tpl-login服务提,上图已经给出了答案。