SpringCloud学习五:路由网关Zuul

SpringCloud学习五:路由网关Zuul

  •  2019 年 3 月 21 日
  •  427
  •  Java SpringCloud Zuul 

Zuul介绍

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

创建服务

创建服务service-zuul,pom.xml依赖如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zuul</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

配置文件

spring:
  application:
    name: service-zuul

server:
  port: 8766

eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

zuul:
  routes:
    api1:
      path: /api1/**
      serviceId: service-feign
    api2:
      path: /api2/**
      serviceId: service-feign-hystrix

配置文件定义了网关服务的端口号为8766,路由设定为吧以/api1/开头的请求转发给service-feign服务,把以/api2/开头的请求转发给service-feign-hystrix服务。为了测试的时候区分是哪个服务返回的结果,我们把service-feign和service-feign-hystrix的api接口的返回值加上服务名前缀:

@Value("${spring.application.name}")
private String appName;

@GetMapping("/hello")
public String hello(@RequestParam String name) {
    return appName + ":" + helloConsumer.hello(name);
}

启动类

启动类添加@EnableZuulProxy注解,开启zuul功能

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ZuulApplication {

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

}

访问测试

启动注册中心等微服务

访问http://localhost:8766/api1/hello?name=搬码工,返回

service-feign:hello 搬码工 ! from port 8762

访问http://localhost:8766/api2/hello?name=搬码工,返回

service-feign-hystrix:hello 搬码工 ! from port 8762

说明我们配置的网关起到了作用,其它功能我会在后续的整理更新。

源码地址

https://github.com/chenpeidong/spring-cloud-demo

扫一扫分享到微信

已有 条评论
写评论