SpringCloud入门(四)之基于Zuul的反向代理

什么是Zuul

Zuul是netflix公司的项目,其功能主要有反向代理、负载均衡等。

下面我们来实战下如何通过Zuul来实现反向代理

基于Zuul的反向代理实战

完整参考代码github

  1. 引入zuul依赖
  2. 使用注解@EnableZuulProxy声明启动Zuul代理;
  3. 自定义路由(默认会给所有注册到注册中心的服务配置路由)

默认会给所有到注册中心注册的服务都注册路由

ps:使用已有的一个服务CustomServei来测试,这个服务提供了一个http接口:GET http://ip:port/hello

新建服务ApiGateWay

如何创建微服务可以参考:

SpringCloud入门(二)之服务注册
SpringCloud入门(一)之Eureka注册中心

引入Zuul依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

启动Zuul反向代理

在项目的启动类中加入注解@EnableZuulProxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.markey.test.apigateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ApiGateWayApplication {

public static void main(String[] args) {
SpringApplication.run(ApiGateWayApplication.class, args);
}
}

配置路由

在SpingBoot的配置文件中配置路由,因为Zuul会给所有注册到注册中心的服务配置默认路由,所以不配置也可以。
以下配置可以实现,当访问 http://localhost:8083/customservice/user 时,请求会被转发到名为CustomService的服务上,并获取CustomService提供的接口http://localhost:8082/user 的返回结果。

ps:CustomServie服务的实现代码可以参考:SpringCloud入门(三)之基于Feign的服务间接口调用

1
2
3
4
5
6
7
8
9
#配置端口号,默认为8080,已被我的注册中心使用
server.port=8083
#配置服务名,不配置的话,注册中心显示为UnKnown
spring.application.name=ApiGateWay
#配置注册中心地址,不配置的话,程序启动会失败
eureka.client.service-url.defaultZone=http://localhost:8080/eureka/

#zuul路由配置
zuul.routes.CustomService=/customservice/**

测试

1.启动注册中心和提供接口的服务
2.启动引入了Zuul的服务
3.访问测试接口

反向代理成功