• 118489

    文章

  • 803

    评论

  • 12

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

Spring Cloud Zuul 构建微服务网关

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

为什么要有服务网关?在使用微服务架构时,一个客户端的业务需求可能会调用多个服务的接口,例如一次购物,需要调用商品服务,下单的时候要调用订单服务(服务划分更细的话还要调用更多的微服务)。客户端直接跟各个服务通信会有一些问题或者说弊端,客户端的调用会复杂,更重要的是会有跨域请求问题和复杂的权限控制认证

为了对外服务的安全性,不得不在原有的服务接口上做校验逻辑,而这些权限相关的逻辑应该要把它从各个服务中抽离出来,作为外部调用和各个服务之间的负载均衡器。服务网关就是这样一个角色,对外统一 Rest API 接口,对内服务路由、负载均衡,同时还提供身份认证安全和监控功能

Zuul

Zuul 是 Netflix 开源的服务网关,它的核心就是一系类的过滤器

构建 Zuul 微服务网关

准备

这里使用 Eureka Server 作为服务注册中心

spring:
  application:
    name: eureka-server
server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

另外准备一个服务 product-service

spring:
  application:
    name: product-service
server:
  port: 8071
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

构建 Zuul 微服务网关

创建 Spring Boot 工程 gateway-zuul 作为服务网关,添加如下依赖

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

在主类上添加注解 @EnableZuulProxy 开启 Zuul 代理,这个代理会使用 Ribbon 获取注册服务的实例,同时还整合了 Hystrix 实现容错,所有请求都会在 Hystrix 命令中执行。

@SpringBootApplication
@EnableZuulProxy
public class GatewayZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayZuulApplication.class, args);
    }
}
@EnableCircuitBreaker
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ZuulProxyMarkerConfiguration.class)
public @interface EnableZuulProxy {
}

配置信息,添加 eureka 注册中心的地址

spring:
  application:
    name: gateway-zuul
server:
  port: 8090
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

到这里一个简单的服务网关就完成了,只是简单吧把网关服务注册到 Eureka,Spring Cloud Zuul 整合了 Eureka,会提供默认的服务路由功能,默认情况下,Zuul 会代理所有注册到 Eureka Server 上的微服务

gateway-zuul 的请求 /{serviceId}/** 会转发到对应注册在 Eureka Server 上对应 serviceId 的服务 /** 上,例如:
启动 eureka-server、product-service、gateway-zuul,然后访问 http://localhost:8090/product-service/product/1 ,该请求会被转发到 product-service 的 /product/1

另外想要跳过一些服务可以设置 zuul.ignoredServices,要获得对路由的更细粒度控制,可以单独指定路径和 serviceId

zuul:
  ignoredServices: '*'
  routes:
    product:
      path: /product/**
      serviceId: product-service

上面设置的是除 product 服务之外的服务都忽略,而访问 product-service 服务的路径为 /product/**


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客