Spring Cloud的微服务网关(Zuul)构建

一、为何要使用微服务网关

每个微服务都有各自的网络访问地址,客户端如APP完成一个业务流程(如下订单)需请求多个微服务接口才能完成,对系统使用与可维护性不强问题体现在:

1. 需要每个微服务独立认证,显然认证复杂。

2. 系统业务不是一成不变,随着系统迭代变化重新划分微服务,如:将一个比较复杂微服务拆分成多个,或是将比较简单与同类的业务合并成一个,此时,客户端请求微服务,不但需修改请求的新微服务接口,客户端需请求不同的微服务接口,增加客户端调用的复杂度。

3. 各微服务存在跨域情况下,处理比较复杂。

微服务网关的作用相当于客户端与各个微服务的中间层,客户端所有业务请求,统一请求微服务网关,以上问题即可解决。

二、Zuul介绍

Zuul 是在云计算平台上提供动态路由,监控,弹性,安全等边缘服务的框架,是netflix公司开源组件,spring-cloud在此组件基础上进行了整合与扩展。可以与Eureka、Hystrix、Ribben、Feign等组件很好的配合使用。Zuul的核心功能是一系列的过滤器ZuulFilter。

三、Zuul 微服务网关应用

编写一个微服务网关

1. 创建一个Maven工程取名(api-gateway),添加微服务网关所需的依赖jar。

org.springframework.cloud

spring-cloud-starter-zuul

org.springframework.cloud

spring-cloud-starter-eureka

2. 在微服务网关启动类上添加注解@EnableZuulProxy,表示声明一个Zuul代理。该代理同时整合了Hystrix与Ribbon,Hystrix实现容错所有经边Zuul的请求都会执行Hystrix命令。Ribbon实现负载均衡所有经边Zuul的请求可以使用Ribbon达到负载均衡的目的。

3. 编写application.yml配置文件

server:

port: 8080

spring:

application:

name: ysn-api-gateway

eureka:

client:

registerWithEureka: true #是否注册到服务中心

fetchRegistry: true #是否拉取服务注册信息

serviceUrl:

defaultZone: http://localhost:8761/eureka/

instance:

prefer-ip-address: true

zuul:

max:

host:

connections: 500

host:

socket-timeout-millis: 60000

connect-timeout-millis: 60000

prefix: /api #前缀, 这样请求url需要为/api/core-service才会匹配到/core-service

routes:

product-service:

path: /product-service/**

service-id: product-service

sensitiveHeaders: Cookie,Set-Cookie

search-service:

path: /search-service/**

service-id: search-service

sensitiveHeaders: Cookie,Set-Cookie

经过上面几步,就编写完成了一个简单的微服务网关了。从配置可以看出在yml文件中将微服务网关注册到Eureka服务中。

4. 运行测试

在运行测试之前,还有创建一个注册中心服务与两个业务模块微服务配合测试。

比如:注册中心服务(config-server)与电商系统中的商品产品服务(product-service)和全文搜索服务elasticsearch(search-service)。

启动项目:

1)启动服务 config-server

2)启动服务 api-gateway

3)启动服务 product-service

4)启动服务 search-service

访问测试:

1)请求http://localhost:8080/api/product-service/product/1 ,请求会被转发到http://localhost:8081/product/1

2)请求http://localhost:8080/api/search-service/search/1 ,请求会被转发到http://localhost:8082/search-service/search?params=test

Zuul默认会代理所有注册到Eureka 的微服务,并由Zuul网关路由,规则如下:

http://网关地址:端口/api/微服务在Eureka上的serviceId/* 转发到serivceId对应的微服务。

到此Spring Cloud的微服务网关(Zuul)构建已完成,后续文章将测试负载均衡、容错与监控以及Zuul聚合微服务几小篇。关注“软件开发漫谈”头条号。

你可能感兴趣的:(Spring Cloud的微服务网关(Zuul)构建)