一、什么是网关
Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能, 类似于nginx转发。
二、创建service项目
略参考上面博客
三、创建生产者项目 springcloud_eureka_member并启动
1 导入pom文件节点
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependencyManagement> <dependencies> <!--springCloud依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2 创建application.yml文件
##应用名称 spring: application: name: member-server #声明当前 eurakaserver端口号 server: port: 9001 #配置eureka eureka: client: #配置地址 service-url: defaultZone: http://localhost:8888/eureka
3 创建service层接口
public interface MemberService { public String getMember(); }
4 创建service层接口实现类
@RestController public class MemberServiceImpl implements MemberService { @RequestMapping("/member") @Override public String getMember() { System.out.println("member getMember方法"); return "member"; } }
5 创建启动程序类StartProvider
@SpringBootApplication @EnableEurekaClient public class StartProvider { public static void main(String[] args) { SpringApplication.run(StartProvider.class,args); }
6 运行效果
四、创建消费者项目 springcloud_eureka_order
1 创建application.yml文件
##应用名称 spring: application: name: order-server #声明当前 eurakaserver端口号 server: port: 9002 #配置eureka eureka: client: #配置地址 service-url: defaultZone: http://localhost:8888/eureka
2 创建service层接口
@FeignClient("member-server") public interface OrderService { @RequestMapping("/member") public String getOrder(); }
3 创建启动程序类
@SpringBootApplication @EnableEurekaClient @EnableFeignClients public class StartProvider { public static void main(String[] args) { SpringApplication.run(StartProvider.class,args); }
4 运行效果
五、创建项目springcloud_zuul
1 创建application.yml文件
eureka: client: service-url: defaultZone: http://localhost:8888/eureka server: port: 10001 spring: application: name: zuul ##配置zuul网关 zuul: routes: api-a: path: /member-zuul/** service-id: member-server api-b: path: /order-zuul/** service-id: order-server
2 创建启动程序类
@SpringBootApplication @EnableEurekaClient @EnableZuulProxy public class StartZuul { public static void main(String[] args) { SpringApplication.run(StartZuul.class,args); } }
3 运行效果
4 创建服务过滤类
@Component public class MyZuulFilter extends ZuulFilter { /** * 过滤类型 * @return */ @Override public String filterType() { return "pre"; } /** * 请求过滤顺序 * @return */ @Override public int filterOrder() { return 0; } /** * * @return */ @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { //获取token参数 RequestContext rc = RequestContext.getCurrentContext(); HttpServletRequest request = rc.getRequest(); String token = request.getParameter("token"); if(token!=null){ return null; } //表示不进行路由 rc.setSendZuulResponse(false); rc.setResponseStatusCode(401); try { rc.getResponse().setContentType("text/html;charset=utf-8"); rc.getResponse().getWriter().write("没有传递正确参数,请校验后重试~"); } catch (IOException e) { e.printStackTrace(); } return null; } }
5 运行效果当加上token时
当没有token时