请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 340|回复: 1

java B2B2C springmvc mybatis电子商务平台源码-------zuul网关实现

[复制链接]
发表于 2018-12-7 16:06:12 | 显示全部楼层 |阅读模式
一、简介

    在Springcloud中用zuul来实现网关功能,客户端的请求首先经过负载均衡Ngnix,再到达服务网关(zuul集群),然后再到具体的服务。Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/server1转发到到server1服务。zuul默认和Ribbon结合实现了负载均衡的功能。愿意了解源码的朋友直接求求交流分享技术:二一四七七七五六三三

二、搭建

   首先是POM文件

  1. <dependency>

  2.             <groupId>org.springframework.cloud</groupId>

  3.             <artifactId>spring-cloud-starter-eureka</artifactId>

  4.         </dependency>

  5.         <dependency>

  6.             <groupId>org.springframework.cloud</groupId>

  7.             <artifactId>spring-cloud-starter-zuul</artifactId>

  8.         </dependency>

  9.         <dependency>

  10.             <groupId>org.springframework.boot</groupId>

  11.             <artifactId>spring-boot-starter-web</artifactId>

  12.         </dependency>
复制代码

 然后在applicaton类加上注解@EnableZuulProxy,开启zuul的功能

  1. @SpringBootApplication

  2. @EnableZuulProxy

  3. @EnableEurekaClient

  4. @RefreshScope

  5. public class HfzZuulApplication {



  6.     public static void main(String[] args) {

  7.         SpringApplication.run(HfzZuulApplication.class, args);

  8.     }

  9. }
复制代码

yml配置如下

  1. eureka:

  2.   client:

  3.     serviceUrl:

  4.       defaultZone: http://name:pass@IP/eureka/

  5.   instance:

  6.     ip-address: Ip地址

  7.     prefer-ip-address: true

  8. server:

  9.   port: 8769

  10. spring:

  11.   application:

  12.     name: service-zuul

  13.   sleuth:

  14.     sampler:

  15.       percentage: 1.0

  16.   cloud:

  17.     config:

  18.       discovery:

  19.         enabled: true

  20.         service-id: CONFIG-SERVER

  21.       label: master

  22.       profile: dev

  23.       name: hfz-zuul

  24.       username: name

  25.       password: pass
复制代码

 以上是在项目中配置的,为了使项目更加灵活,所以将路由的配置放在github上,这样可以动态读取

  1. zuul:

  2.   routes:

  3.     api-a:

  4.       path: /api-a/**

  5.       serviceId: service-ribbon

  6.     api-b:

  7.       path: /api-b/**

  8.       serviceId: service-feign
复制代码

以/api-a/ 开头的请求都转发给service-ribbon服务;以/api-b/开头的请求都转发给service-feign服务;

三、服务过滤

zuul不仅可以路由,并且还能通过过滤来拦截一些服务,可以用来做安全验证。

  1. public class MyFilter extends ZuulFilter{



  2. private static Logger log = LoggerFactory.getLogger(MyFilter.class);

  3. @Override

  4. public String filterType() {

  5.     return "pre";

  6. }



  7. @Override

  8. public int filterOrder() {

  9.     return 0;

  10. }



  11. @Override

  12. public boolean shouldFilter() {

  13.     return true;

  14. }



  15. @Override

  16. public Object run() {

  17.     RequestContext ctx = RequestContext.getCurrentContext();

  18.     HttpServletRequest request = ctx.getRequest();

  19.     log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));

  20.     Object accessToken = request.getParameter("token");

  21.     if(accessToken == null) {

  22.         log.warn("token is empty");

  23.         ctx.setSendZuulResponse(false);

  24.         ctx.setResponseStatusCode(401);

  25.         try {

  26.             ctx.getResponse().getWriter().write("token is empty");

  27.         }catch (Exception e){}



  28.         return null;

  29.     }

  30.     log.info("ok");

  31.     return null;

  32. }

  33. }
复制代码

filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
pre:路由之前
routing:路由之时
post: 路由之后
error:发送错误调用
filterOrder:过滤的顺序
shouldFilter:逻辑判断,是否要过滤
run:过滤器的具体逻辑控制
接下来就可以测试访问了。

技术架构图如下:资料和源码来源
h5.jpg

 楼主| 发表于 2018-12-7 16:07:29 | 显示全部楼层
喜欢的朋友可以持续关注更新文章!
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

视频、代码、电子书下载
请关注"疯狂图书"公众号
QQ交流1群: 545923995  未满
微信群请扫二维码
QQ交流1群:
545923995
(未满)

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2019-1-22 20:24 , Processed in 0.303314 second(s), 7 queries , File On.

快速回复 返回顶部 返回列表