Spring Cloud详细讲解zuul集成Eureka流程
zuul集成Eureka
通过刚才的示例,我们已经可以简单地使用 Zuul 进行路由的转发了,在实际使用中我们通常是用 Zuul 来代理请求转发到内部的服务上去,统一为外部提供服务。内部服务的数量会很多,而且可以随时扩展,我们不可能每增加一个服务就改一次路由的配置,所以也得通过结合 Eureka 来实现动态的路由转发功能。首先需要添加 Eureka 的依赖,代码如下所示。
<dependency>
<groupId>org.springframework.cloud</groupId >
<artifactId>spring-cloud- starter-netflix-eureka-client</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
说明:这里的eureka-client版本要使用2.2.9.RELEASE,否则会报错!
启动类不需要修改,因为 @EnableZuulProxy 已经自带了 @EnableDiscoveryClient。只需要在配置文件中增加Eureka 的地址即可:
eureka:
client:
service-url:
defaultZone: Http://admin:1357@localhost:8761/eureka
重启服务,我们可以通过默认的转发规则来访问 Eureka中的服务。访问规则是“网关服务地址+访问的服务名称+接口 URI”。
如上面的访问改为: http://localhost:7000/ws-user-server/user/23
Zuul路由配置
当 Zuul 集成 Eureka 之后,其实就可以为 Eureka 中所有的服务进行路由操作了,默认的转发规则就是“网关 服务地址+访问的服务名称+接口 URI”。在给服务指定名称的时候,应尽量短一点,这样的话我们就可以用默认的路由规则进行请求,不需要为每个服务都定一个路由规则,这样就算新增了服务,api 网关也不用修改和重启了。
1. 指定具体服务路由
我们可以为每一个服务都配置一个路由转发规则:
zuul:
routes: #路由转发
ws-user-server:
path: /api-user @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { RequestContext requestContext=RequestContext.getCurrentCo ntext();String token= requestContext.getRequest().getHeader("tok en"); //如果token没传或 失效 if(null==token){ requestContext.setSendZuulResponse(false); //告诉 Zuul 不需要将当前请求转发到后端的服务了 requestContext.setResponseBody(" {code:0,msg:'返回给客户端的数据'}"); requestContext.getResponse().setContentTyp e("application/JSON; charset=utf-8"); }return null; } }
使过滤器生效:
@Configuration
public class FilterConfig {
@Bean
public TokenFilter tokenFilter(){
return new TokenFilter();
}
}
到此这篇关于spring cloud详细讲解zuul集成Eureka流程的文章就介绍到这了,更多相关Spring Cloud Eureka内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!