文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在Springcloud中怎么用zuul来实现网关功能

2023-06-05 05:11

关注

这篇文章给大家分享的是有关在Springcloud中怎么用zuul来实现网关功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

个人分类: Spring Cloud

编辑

一、简介

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

二、搭建

   首先是POM文件 

<dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-zuul</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>

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

@SpringBootApplication@EnableZuulProxy@EnableEurekaClient@RefreshScopepublic class HfzZuulApplication {     public static void main(String[] args) {        SpringApplication.run(HfzZuulApplication.class, args);    }}

yml配置如下 

eureka:  client:    serviceUrl:      defaultZone: http://name:pass@IP/eureka/  instance:    ip-address: Ip地址    prefer-ip-address: trueserver:  port: 8769spring:  application:    name: service-zuul  sleuth:    sampler:      percentage: 1.0  cloud:    config:      discovery:        enabled: true        service-id: CONFIG-SERVER      label: master      profile: dev      name: hfz-zuul      username: name      password: pass

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

zuul:  routes:    api-a:        path: /api-a/**          serviceId: service-ribbon         api-b:             path: /api-b/**             serviceId: service-feign

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

三、服务过滤

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

public class MyFilter extends ZuulFilter{ private static Logger log = LoggerFactory.getLogger(MyFilter.class);@Overridepublic String filterType() {    return "pre";} @Overridepublic int filterOrder() {    return 0;} @Overridepublic boolean shouldFilter() {    return true;} @Overridepublic Object run() {    RequestContext ctx = RequestContext.getCurrentContext();    HttpServletRequest request = ctx.getRequest();    log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));    Object accessToken = request.getParameter("token");    if(accessToken == null) {        log.warn("token is empty");        ctx.setSendZuulResponse(false);        ctx.setResponseStatusCode(401);        try {            ctx.getResponse().getWriter().write("token is empty");        }catch (Exception e){}         return null;    }    log.info("ok");    return null; }}

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

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

在Springcloud中怎么用zuul来实现网关功能

感谢各位的阅读!关于“在Springcloud中怎么用zuul来实现网关功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯