springcloud网关服务组件zuul路由功能初探
zuul作为一个网关服务组件,他其实是有路由功能的,这个路由类似nginx的反向代理,也有文章来比较nginx和zuul来做反向代理与负载均衡的不同,zuul是用java编写的,而nginx是用c++编写的,zuul如果单独拿来使用,可以替换nginx,下面通过一个简单的示例,展示zuul路由功能。
这里假定一个http请求http://localhost:5000/service/user/get/20,当我们使用zuul做路由转发,可以将这个请求转发到http://localhost:8081/user/get/20上,这里我们就通过zuul来做一个简单的示例。
首先就需要我们编写一个RESTful的http服务,提供/user/get/{id}的接口,返回指定ID的用户信息。这个服务使用什么实现完全不用关心,也不需要通过服务注册与发现来做服务注册。
另外,我们准备我们的zuul工程,这里只需要引入spring-cloud-starter-netflix-zuul(Finchley.RELEASE版本)依赖即可。我们从依赖关系上看,他已经包含了spring-boot-starter-web,spring-cloud-starter-netflix-hystrix,spring-cloud-starter-netflix-ribbon等依赖。
项目中就一个启动类:
package com.xxx.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
public static void main( String[] args ){
SpringApplication.run(ZuulApplication.class, args);
}
}
借助springboot启动,@EnableZuulProxy表示开启网关代理服务。
这里重点是配置文件中关于路由的配置:
如果使用eureka或者consul来做服务注册,提供服务服务已经注册名叫xxservice,我们可以通过如下的配置来实现:
zuul.routes.service.path=/service/**
zuul.routes.service.serviceId=xxservice
这样实现是通过服务名来调用,这样一个服务名可能就有好几个实例,能够做负载均衡。
分别启动服务提供者,和网关服务,我们通过curl测试一下路由是否实现:
这里的路由转发确实跟nginx的反向代理功能很像,在springcloud中,通过服务名来调用,就能真正的实现反向代理以及负载均衡了。
还没有评论,来说两句吧...