关闭

spring cloud - API Gateway

标签: spring-cloudspring-bootgateway
1501人阅读 评论(0) 收藏 举报
分类:

spring cloud API Gateway

  通过API Gateway,可以统一向外部系统提供REST API。Spring Cloud中使用Zuul作为API Gateway。Zuul提供了动态路由、监控、回退、安全等功能。

  1. eureka+Zuul配置和使用

(1).准备工作

// 为了更贴近生产,我们首先配置Host

127.0.0.1 gateway

// 启动服务:microservice-discovery-eureka
// 启动服务:microservice-provider-user

(2).Zuul代码示例


//gradle依赖如下

compile "org.springframework.cloud:spring-cloud-starter-zuul:Brixton.SR5"
compile "org.springframework.cloud:spring-cloud-starter-eureka:Brixton.SR5"

//maven依赖如下

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>Brixton.SR5</version>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
    <version>Brixton.SR5</version>
</dependency>
// 启动类ZuulApiGatewayApplication.java

/**
 * 使用@EnableZuulProxy注解激活zuul。
 * 跟进该注解可以看到该注解整合了@EnableCircuitBreaker、@EnableDiscoveryClient,是个组合注解,目的是简化配置。
 * @author eacdy
 */
@SpringBootApplication
@EnableZuulProxy
public class ZuulApiGatewayApplication {
  public static void main(String[] args) {
    SpringApplication.run(ZuulApiGatewayApplication.class, args);
  }
}
// 配置文件:application.yml

spring:
  application:
    name: microservice-api-gateway
server:
  port: 8050
eureka:
  instance:
    hostname: gateway
  client:
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/

// 这样,一个简单的API Gateway就完成了。      

(3).测试工作


// 启动microservice-api-gateway项目。还记得我们之前访问通过http://localhost:8000/1去访问microservice-provider-user服务中id=1的用户信息吗?

// 我们现在访问http://localhost:8050/microservice-provider-user/1试试。会惊人地看到:

{"id":1,"username":"Tom","age":12}

// 这正是microservice-provider-user服务中id=1的用户信息

// 所以我们可以总结出规律:访问

http://GATEWAY:GATEWAY_PORT/想要访问的Eureka服务id的小写/**

// 将会访问到

http://想要访问的Eureka服务id的小写:该服务端口/**

(4).自定义路径

// 上文我们已经完成了通过API Gateway去访问微服务的目的,是通过

http://GATEWAY:GATEWAY_PORT/想要访问的Eureka服务id的小写/**

//的形式访问的,那么如果我们想自定义在API Gateway中的路径呢?譬如想使用

http://localhost:8050/user/1

// 就能够将请求路由到http://localhost:8000/1呢?

// 只需要做一点小小的配置即可:

spring:
  application:
    name: microservice-api-gateway
server:
  port: 8050
eureka:
  instance:
    hostname: gateway
  client:
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/
# 下面整个树都非必须,如果不配置,将默认使用 http://GATEWAY:GATEWAY_PORT/想要访问的Eureka服务id的小写/** 路由到:http://想要访问的Eureka服务id的小写:该服务端口/**
zuul:
  routes:
    user:                                               # 可以随便写,在zuul上面唯一即可;当这里的值 = service-id时,service-id可以不写。
      path: /user/**                                    # 想要映射到的路径
      service-id: microservice-provider-user            # Eureka中的serviceId

(5).如何忽略某些服务

// 启动服务:microservice-discovery-eureka
// 启动服务:microservice-provider-user
// 启动服务:microservice-consumer-movie-ribbon

// 如果我们现在只想将microservice-consumer-movie-ribbon服务暴露给外部,microservice-provider-user不想暴露,那么应该怎么办呢?

// 依然只是一点小小的配置即可:

spring:
  application:
    name: microservice-api-gateway
server:
  port: 8050
eureka:
  instance:
    hostname: gateway
  client:
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/
zuul:
  ignored-services: microservice-provider-user          # 需要忽视的服务(配置后将不会被路由)
  routes:
    movie:                                              # 可以随便写,在zuul上面唯一即可;当这里的值 = service-id时,service-id可以不写。
      path: /movie/**                                   # 想要映射到的路径
      service-id: microservice-consumer-movie-ribbon-with-hystrix    # Eureka中的serviceId

// 这样microservice-provider-user服务就不会被路由,microservice-consumer-movie-ribbon服务则会被路由。      

(7).描述来源于:http://book.itmuch.com/2%20Spring%20Cloud/2.6%20API%20Gateway.html

  1. 使用Zuul不使用Eureka
// Zuul并不依赖Eureka,可以脱离Eureka运行,此时需要配置

spring:
  application:
    name: microservice-api-gateway
server:
  port: 8050
zuul:
  routes:
    movie:                                              # 可以随便写
      path: /user/**
      url: http://localhost:8000/                       # path路由到的地址,也就是访问http://localhost:8050/user/**会路由到http://localhost:8000/**


// 我们可尝试访问http://localhost:8050/user/1 ,会发现被路由到了http://localhost:8000/1 。不过在大多数情况下,笔者并不建议这么做,因为得手动大量地配置URL,不是很方便。

// Zuul还支持更多的特性、更多的配置项甚至是定制开发,具体还请读者自行发掘。

// Zuul只是API Gateway的一种实现,可作为API Gateway的软件有很多,譬如Nginx Plus、Kong等等

描述来源于:http://book.itmuch.com/2%20Spring%20Cloud/2.6%20API%20Gateway.html

1
0
查看评论

Spring Cloud入门3——API Gateway

为什么要使用API Gateway 如果客户端直接调用微服务的话可能会存在以下问题: 1. 移动客户端或者web客户端调用的微服务数量可能非常多。例如,亚马逊的产品最终页要请求数百个微服务。虽然一个客户端可以通过LAN发起很多个请求,但是在公网上这样会很没有效率,这个问题在移动互联网上尤为突出。这个...
  • a60782885
  • a60782885
  • 2017-04-06 21:48
  • 7307

spring cloud-构建微服务架构的网关(API GateWay)

前言 在我们前面的博客中讲到,当服务A需要调用服务B的时候,只需要从Eureka中获取B服务的注册实例,然后使用Feign来调用B的服务,使用Ribbon来实现负载均衡,但是,当我们同时向客户端暴漏多个服务的时候,客户端怎么调用我们暴漏的服务了,如果我们还想加入安全认证,权限控制,过滤器以及动态路由...
  • liuchuanhong1
  • liuchuanhong1
  • 2017-03-01 12:20
  • 8206

springcloud zuul gateway 服务网关

  • 2017-02-21 09:42
  • 19KB
  • 下载

springcloud----Zuul动态路由

前言Zuul 是Netflix 提供的一个开源组件,致力于在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。也有很多公司使用它来作为网关的重要组成部分,碰巧今年公司的架构组决定自研一个网关产品,集动态路由,动态权限,限流配额等功能为一体,为其他部门的项目提供统一的外网调用管理,最终形成产品(...
  • u013815546
  • u013815546
  • 2017-04-01 14:11
  • 17041

9-SpringCloud微服务实战-Zuul-APIGateway

9-SpringCloud微服务实战-Zuul-APIGateway9-SpringCloud微服务实战-Zuul-APIGateway 1 API Gateway 2 Zuul介绍 21 zuul的功能 22 Zuul的配置简述 23 在springcloud中使用zuul 3 Zuul的基本使用...
  • qq_22841811
  • qq_22841811
  • 2017-03-28 15:51
  • 15716

使用Spring Cloud Zuul实现动态路由

Zuul 是提供动态路由,监控,弹性,安全等的边缘服务。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。 Zuul 可以适当的对多个 Amazon Auto Scaling Groups 进行路由请求。 首先新建maven项目,加入如下依赖 ...
  • mn960mn
  • mn960mn
  • 2016-07-05 16:48
  • 34907

spring cloud-构建微服务架构的网关(API GateWay)

在我们前面的博客中讲到,当服务A需要调用服务B的时候,只需要从Eureka中获取B服务的注册实例,然后使用Feign来调用B的服务,使用Ribbon来实现负载均衡,但是,当我们同时向客户端暴漏多个服务的时候,客户端怎么调用我们暴漏的服务了,如果我们还想加入安全认证,权限控制,过滤器以及动态路由等特性...
  • bigtree_3721
  • bigtree_3721
  • 2017-09-18 10:24
  • 681

SpringBoot -- 服务网关APIGateway

APIGateway 对外提供服务接口 对内根据逻辑调用内部多个接口,进行信息聚合返回给调用者 异步调用无需等待反馈的服务 使用场景 商品详情: 需要调用商品基础信息、推荐信息、评价、排名接口 登录+积分:调用登录、积分规则链等接口 鉴权 … … ...
  • cwenao
  • cwenao
  • 2017-01-16 11:37
  • 12770

API GATEWAY API 网关

Zuul1、添加Zuul依赖以及Eureka依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>...
  • w_x_z_
  • w_x_z_
  • 2016-12-21 22:39
  • 2320

API Gateway技术设计

一,API Gateway架构设计 服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保...
  • u014091123
  • u014091123
  • 2017-08-04 14:45
  • 865
    个人资料
    • 访问:77786次
    • 积分:1577
    • 等级:
    • 排名:千里之外
    • 原创:65篇
    • 转载:0篇
    • 译文:0篇
    • 评论:45条
    博客专栏
    最新评论