ws配置 zuul_SpringCloud系列研究---服务网关zuul

一、zuul简介

服务网关是微服务架构中的入口,微服务平台通过服务网关统一向外部暴露API供客户端调用,网关除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。在Spring Cloud中的Zuul就担任了这样的一个角色,为微服务架构提供了保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

二、环境介绍

同上一篇介绍ribbo中的环境一样,首先我们在A服务器上启动Eureka服务,然后在B、C两台服务器上分别启动ms-demo-provider服务,这里也可以部署在一台服务器上采用不同的端口。访问Eureka界面查看服务注册状态,之后在本地新建客户端调用工程进行测试。此时A为Eureka的注册中心,B、C分别为服务提供者(提供相同的接口),本地工程为基于zuul的服务网关。

三、项目代码

在Idea中创建maven工程,ms-zuul-demo工程的最终代码结构如下:

1:pom.xml中的依赖如下:

4.0.0

com.cloud.microservice

ms-zuul-demo

0.0.1-SNAPSHOT

jar

ms-zuul-demo

Demo project for Spring Boot

org.springframework.boot

spring-boot-starter-parent

1.5.9.RELEASE

UTF-8

UTF-8

1.8

Edgware.SR1

org.springframework.cloud

spring-cloud-starter-eureka

org.springframework.cloud

spring-cloud-starter-zuul

org.springframework.boot

spring-boot-starter-test

test

org.springframework.cloud

spring-cloud-dependencies

${spring-cloud.version}

pom

import

org.springframework.boot

spring-boot-maven-plugin

2:application.properties中的配置信息如下:

spring.application.name=ms-gateway-zuul

server.port=8000# 注册中心地址

eureka.client.serviceUrl.defaultZone=http://xx.xx.xx.xx:9000/eureka/

#这里的配置表示,访问/userdemo/**直接重定向到eureka中的ms-demo-provider这个serviceId

zuul.routes.userprovider.path=/userdemo/**

zuul.routes.userprovider.serviceId=ms-demo-provider

3:在入口类Application中增加@EnableZuulProxy注解,表明这是个网关服务

packagecom.cloud.microservice;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication

@EnableZuulProxypublic classZuulDemoApplication {public static voidmain(String[] args) {

SpringApplication.run(ZuulDemoApplication.class, args);

}

}

启动工程,然后刷新Eureka界面,可以看到本地zuul服务已经注册到服务中心。

四、运行测试

打开浏览器,访问http://localhost:8000/userdemo/demo/user/1.0/findAll,返回结果如下,说明网关已经成功转发到相应的服务,接口调用成功。

至此,zuul的简单demo已经完成,其他高级功能有待后续研究。

五、问题总结

如果在通过网关访问接口的时候出现com.netflix.zuul.exception.ZuulException: Forwarding error错误,则需要在pom.xml中增加如下依赖:

我由于是用idea模板生成的工程,所以pom里面缺少spring-cloud-starter-eureka这个jar包,后来加上之后问题就解决了。

org.springframework.cloud

spring-cloud-starter-eureka

详细log信息:

2018-01-26 16:36:24.925 WARN 32240 --- [nio-8000-exec-3] o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering

com.netflix.zuul.exception.ZuulException: Forwarding error

at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:189) ~[spring-cloud-netflix-core-1.4.2.RELEASE.jar:1.4.2.RELEASE]

at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:164) ~[spring-cloud-netflix-core-1.4.2.RELEASE.jar:1.4.2.RELEASE]

at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:111) ~[spring-cloud-netflix-core-1.4.2.RELEASE.jar:1.4.2.RELEASE]

at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112) ~[zuul-core-1.3.0.jar:1.3.0]

at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193) ~[zuul-core-1.3.0.jar:1.3.0]

at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157) ~[zuul-core-1.3.0.jar:1.3.0]

at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118) ~[zuul-core-1.3.0.jar:1.3.0]

at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96) ~[zuul-core-1.3.0.jar:1.3.0]

at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116) ~[zuul-core-1.3.0.jar:1.3.0]

at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81) ~[zuul-core-1.3.0.jar:1.3.0]

at org.springframework.web.servlet.mvc.ServletWrappingController.han

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值