前面几篇关于springcloud的文章主要介绍了关于微服务的服务注册发现、接口请求,服务软负载,通过这几点已经可以构成基本的微服务架构了,但是微服务架构是内部的架构体系,对外不可能直接提供这样的服务接口,一般都是通过网关来访问,我们设计网关主要是要实现服务接入、交易路由、安全、协议转换、权限控制等功能,其中网关的大部分接口都不会对报文进行加工,都是透传接口,springcloud也提供了网关组件Zuul,Zuul对于透传接口基本不用开发,只需要进行简单配置就可以了,路由工作全部由Zuul实现,下面我们就来讲下如何实现基础网关功能。
1. 配置zuul路径
本例在之前feign项目的基础上进行修改,在application.yml中添加zuul的配置信息,zuul只需要配置路由路径和服务名称就可以通过该网关访问到服务端接口,刚才通过Feign实现了后端服务端getUser接口,需要定义FeignClient再在controller中显性调用,如果需要对接口进行的字段进行修改和包装可以通过Feign来实现功能加工,如果是透传接口那么通过zuul会非常方便,不需要一句编码就可以实现透传接口的网关功能,举个例子,启动usercenter-provider应用,通过访问http://localhost:8084/getUser可以访问到获取用户信息的接口,usercenter-provider是服务提供方,对于外部,例如移动端要通过zuul定义的网关来访问该透传接口,那么需要访问http://locahost:8080/usercenter/getUser的接口就可以透传访问到刚才usercenter-provider的getUser接口数据。在配置文件中,zuul下可以配置各个服务提供方,serviceid表示在eureka中定义的服务端serviceid,path的定义表示外部通过该上下文路径就会路由到下面的serviceid的对应接口上。
zuul:
routes:
usercenter:
path: /usercenter/**
serviceId: usercenter-provider
2. 测试
启动usercenter-provider应用,启动eureka,启动zuul网关服务,在httprequester的地址栏中输入http://locahost:8080/usercenter/getUser,在报文体栏中输入{"name":"feiweiwei"},发现可以正常返回结果。
小结
使用zuul很简单,也可以很方便的配置集群,把zuul和feign结合起来就很容易实现网关的基本功能,透传接口使用zuul来完成,组合接口或者需要二次加工的接口通过feign来调用,通过这两个组件可以大幅度减轻网关的通用工作,开发人员只需要将重点集中在业务逻辑开发上就可以了。