微服务调用过程

    前面的博客文章已经介绍过spring cloud的服务的相关内容信息,那么我们回顾一下多个微服务的调用过程。微服务一般会由不同的团队去维护,,那么就会由不同的域名和IP。客户端不可能维护那么多的域名,所以就需要统一的维护所有的域名。这个就是spring cloud提供的网关,网关维护着所有的微服务,客户端通过请求到网关,由网关分发到不同的微服务,这样客户端就只需要维护网关的域名即可。

使用网关服务,将网关对外,实现简化和统一管理。网关就类似我们的路由器,由于所有的请求都要经过网关,所以可以在网关中拦截请求,过滤非法请求等。

简介

    上面已经简单说明了网关的作用,这里我们对网关的功能简单介绍一下,但是这里只搭建简单的网关服务,无法详细介绍所有功能。但是我相信google总有你需要的东西。

    Zuul是Netflix开源的服务网关,它可以和前面介绍的Eureka/Ribbon/Hystrix/Feign等组件很好的兼任使用。Zuul的核心是过滤器,通过过滤器实现功能。

  1. 身份认证与安全
  2. 审查与监控
  3. 动态链路
  4. 压力测试
  5. 负载均衡
  6. 静态响应处理
  7. 容错降级

Zuul默认使用Apache HTTP Client作为HTTP客户端。如果要使用RestClient可以配置ribbon.restclient.enabled=true。如果要使用okhttp3.0kHttpClient可以配置ribbon.okhttp.enabled=true。

实现服务网关

1.maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<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-server</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2.启动类添加注解@EnableZuulProxy

@EnableZuulProxy
@SpringBootApplication
public class ApiGatewayApplication {

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

}

3.编写application.yml配置文件

server:
  port: 9000

spring:
  application:
    name: api-gateway

eureka:
  client:
    service-url:
      default-zone: http://localhost:8761/eureka/

zuul:
  routes:
    provider-user: /provider-user/**
    consumer: /consumer/**

这里需要对zuul.routes.xxxx配置做讲解。zuul.routes是固定的,后面的provider-user/consumer是微服务在注册中心的名称。后面的值是映射地址。所有的/provider-user/匹配的请求都会被转发到provider-user名称的微服务中。/consumer也是一样的道理。当然写法有多种,这里是简便的写法。

    Eureka.client.service-url.default-zone的作用就是将网关服务注册到注册中心。

    只要启动网关服务,通过网关的ip和域名+zuul.routes中配置的路由规则就可以访问到对于的服务。

 

4.路由配置介绍

忽略指定的服务:zuul.ignored-services=名称1,名称2

忽略所有微服务,只路由指定的服务:zuul.ignored-services:’*’;zuul.routes.consumer=/consumer/**

忽略某些路径:zuul.ignored-patterns=/**/admin/**(包含admin的都被忽略)

关注微信公众号(程序员小兔)不定期分享技术

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐