学习笔记随机-2019-01-09--01

本文详细介绍了SpringCloud Zuul网关的配置与使用,包括依赖导入、启动类注解、配置文件设置及服务路由规则。探讨了网关的过滤器作用与实现方式,并提供了自定义路由映射关系的方法,适用于版本管理和特殊场景需求。

20190109

目录

1.1.spring cloud-zuul的网关详解

1.1.1.网关的相关设置
1.1.1.1.导入相关的依赖:
1.1.1.2.在启动类上开启zuul的支持
1.1.1.3.在配置文件中添加配置信息
  • 拓展一:另外的一种配置方式
  • 拓展二:服务路由设置
  • 拓展三:服务路由的默认规则
  • 拓展四:特殊场景
  • 注意:cookie与头信息

1.学到的知识

1.1.spring cloud-zuul的网关详解

zuul有网关的作用,但也有Filter的作用,这里记录一下,等会结合到项目中,首先先做网关的路由相关设置。

要想实现Filter,需要以下几个步骤:
1.首先是集成 ZuulFilter类,通过继承ZuulFilter然后覆写下面的4个方法,这样就可以实现一个简单的过滤器。

2.主类中,先开启前面的过滤器。

3.输入请求,测试。

下面将网上的代码,结合到项目中来体现:

1.1.1.网关的相关设置
1.1.1.1.导入相关的依赖:

在springboot基础的依赖上加入 zuul 和 eureka-client 这两个依赖。
因为zuul微服务中需要注册得到eureka中,所以此处需要导入eureka client依赖包。

  • 注意
    此处使用的SpringBoot是2.0.3,使用的SpringCloud是F版,在这个版本里面Zuul和eureka相关的依赖名字都已改变。
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
1.1.1.2.在启动类上开启zuul的支持

主要的注解是:

@SpringBootApplication
/**
 * // 使用@EnableZuulProxy来开启Zuul的支持,如果你不想使用Zuul提供的Filter和反向代理的功能的话,
 * 此处可以使用@EnableZuulServer注解
 */
@EnableZuulProxy
@EnableEurekaClient
@EnableDiscoveryClient
public class ZuulServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZuulServerApplication.class, args);
	}
}
1.1.1.3.在配置文件中添加配置信息

在application.yml中增加服务路由配置,在这之前得有一个前提,那就是在Eureka Server已经注册了你要转发的微服务,分别是:

eureka:
  client:
    serviceUrl:
      defaultZone: http://120.79.82.72:8761/eureka/
    fetch-registry: true
  instance:
    preferIpAddress: true
    hostname: ${spring.cloud.client.ip-address}
    instance-id: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
server:
  port: 7888

spring:
  application:
    name: zuul-service
zuul:
  routes:
    api-a:
      path: /a/
      serviceId: sources-service
    api-b:
      path: /auth/
      serviceId: uaa-service

因为spring cloud zuul通过与spring cloud eureka的整合,实现了对服务实例的自动化维护,所以使用服务路由配置的时候,不需要向传统路由配置方式那样为serviceId指定具体服务实例地址,只需要通过zuul.routes.route.path与zuul.routes.route.serviceId参数对的方式进行配置即可,也就是上面的zuul.routes.api-a./a/.sources-service。

如上面的zuul.routes.api-a./a/.sources-services 这是采用了自定义路由映射关系。对于默认的理由设置,可参见下面的拓展。在网上看到一点,说在实际运用过程中,为了兼容外部不同版本的客户端程序,一般都会采用开闭原则来进行设计与开发。

自己找了一下开闭原则,是指在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”[1],这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。

回到刚刚的点,系统在迭代过程中,网上就有说有时候需要我们为一组互相配合的微服务定义一个版本标记来方便管理它们的版本关系,根据这个标记我们可以很容易的知道这些服务需要一起启动并配合使用。比如:userservice-v1,userservice-v2,orderservice-v1,orderservice-v2等等。默认情况下(这点也会在下面的拓展里面讲到),zuul自动为服务创建的路由表达式会采用服务名作为前缀,比如针对上面的userservice-v1和userservice-v2,它会产生/userservice-v1和/userservice-v2两个路径表达式来映射,这样生成出来的表示式规则单一,不利于管理。

找到的资料说,通常的做法就是为这些不同的版本的微服务应用生成以版本号作为路由前缀定义规则的路由规则,比如/v1/userservice/。这时候,通过这样具有版本号前缀的url路径,我们就可以很同意的通过路径表达式来归类和管理这些具有版本信息的微服务了。

这个时候就需要使用使用zuul中自定义服务与路由映射关系的功能,创建类似于/v1/userserivce/**的路由匹配原则。同时注入以下的Bean。

@Bean
public PatternServiceRouteMapper serviceRouteMapper(){
        return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)","${version}/${name}");
}

PatternServiceRouteMapper对象可以让开发者通过正则表达式来自定义服务与路由映射的生成关系。

构造函数第一个参数是用来匹配服务名称是否符合该自定义规则的正则表达式,第二个参数是定义根据服务名中定义的内容转换出的路径表达式规则。

所以在api网关中定义了PatternServiceRouteMapper实现之后,只需符合第一个参数定义规则的服务名,都会优先使用该实现构建出的表达式,如果没有匹配上的服务规则则还是会使用默认的路由映射规则,记采用完整服务名作为前缀的路径表达式。

  • 拓展1:
    另外的一种配置方式:
    zuul.routes.serviceId=path
    实例如下:
    zuul.routes.uaa-service=/uaa/**

  • 拓展2:
    服务路由设置:
    这里说明一下,那就是zuul其实是整合了eureka注册中心来实现面向服务的路由,也就是zuul在将自己注册到注册中心的时候,也会从注册中心获取所有微服务以及他们的实例清单。这有点类似于eureka集群,eureka各自彼此获取已有的清单数据。也就是在这基础上,api网关的微服务可以维护系统中所有serviceId与实例地址的映射关系。当有外部请求到达api网关的时候,根据请求的url路径找到最佳匹配的path,api网关就可以知道要将请求路由到哪个具体的serviceId上去。

  • 拓展3:
    服务路由的默认规则:
    大部分的路由规则机会都会采用服务名作为外部请求的前缀,例子如下:
    zuul.routes.user-service.path=/user-service/**
    zuul.routes.user-service.serviceId=user-service
    按照网上的一些说法,其实zuul是会默认实现这个规则的,所以如果想要他们的名字一直,可以不配置 前缀的映射。

  • 拓展4:
    特殊场景 :服务我们不需要对外开发也被外部访问到的微服务;
    这种情况下则是使用以下配置:zuul.ignore-services参数来设置一个服务名匹配表达式来定义不自动创建路由的规则。
    zuul在自动创建服务路由的时候会根据该表达式来进行判断,如果服务名匹配表达式,那么zuul将跳过该服务,不为其创建路由规则。比如,设置为zuul.ignored-services=*的时候,zuul将对所有的服务都不自动创建路由规则。

  • 注意点1:
    cookie与头信息:
    zuul在请求路由时,会过滤掉http请求头信息中一些敏感信息,防止它们被传递到下游的外部服务器。默认的敏感头信息通过zuul.sensitiveHeaders参数定义,默认包括cookie,set-Cookie,authorization三个属性。也就是zuul构建的网关来进行路由时,由于cookie信息无法传递,我们的web应用将无法实现登录和鉴权,后面微服务调用用到了authorization,所以这也是后面会重写authorization进去的原因。

  • 注意点1解决办法:
    通过指定路由的参数来设置,方法有下面二种。
    方法一:对指定路由开启自定义敏感头。
    方法二:将指定路由的敏感头设置为空。

    也就是下面的sensitiveHeaders这个参数

zuul:
 routes:
   users:
     path: /myusers/**
     sensitiveHeaders:
     url: https://localhost:7888
  • 在记录一点,可能会用到的知识点:
    就是本地跳转,跳转到网关本服务上,关键字是:forward,也就是服务端跳转配置。
    实现的方式:使用path与url的配置方式,然后在url中使用forward来指定需要跳转的服务器资源路径。

  • 例子:
    以上面的配置为基础,下面的的访问到api-b服务的时候,也将会路由到api-a中,直接路由到sources-service这个微服务。

zuul:
  routes:
    api-a:
      path: /a/
      serviceId: sources-service
    api-b:
      path: /auth/
      serviceId: forward:/sources-service
下载前可以先看下教程 https://pan.quark.cn/s/a426667488ae 标题“仿淘宝jquery图片左右切换带数字”揭示了这是一个关于运用jQuery技术完成的图片轮播机制,其特色在于具备淘宝在线平台普遍存在的图片切换表现,并且在整个切换环节中会展示当前图片的序列号。 此类功能一般应用于电子商务平台的产品呈现环节,使用户可以便捷地查看多张商品的照片。 说明中的“NULL”表示未提供进一步的信息,但我们可以借助标题来揣摩若干核心的技术要点。 在构建此类功能时,开发者通常会借助以下技术手段:1. **jQuery库**:jQuery是一个应用广泛的JavaScript框架,它简化了HTML文档的遍历、事件管理、动画效果以及Ajax通信。 在此项目中,jQuery将负责处理用户的点击动作(实现左右切换),并且制造流畅的过渡效果。 2. **图片轮播扩展工具**:开发者或许会采用现成的jQuery扩展,例如Slick、Bootstrap Carousel或个性化的轮播函数,以达成图片切换的功能。 这些扩展能够辅助迅速构建功能完善的轮播模块。 3. **即时数字呈现**:展示当前图片的序列号,这需要通过JavaScript或jQuery来追踪并调整。 每当图片切换时,相应的数字也会同步更新。 4. **CSS美化**:为了达成淘宝图片切换的视觉效果,可能需要设计特定的CSS样式,涵盖图片的排列方式、过渡效果、点状指示器等。 CSS3的动画和过渡特性(如`transition`和`animation`)在此过程中扮演关键角色。 5. **事件监测**:运用jQuery的`.on()`方法来监测用户的操作,比如点击左右控制按钮或自动按时间间隔切换。 根据用户的交互,触发相应的函数来执行...
垃圾实例分割数据集 一、基础信息 • 数据集名称:垃圾实例分割数据集 • 图片数量: 训练集:7,000张图片 验证集:426张图片 测试集:644张图片 • 训练集:7,000张图片 • 验证集:426张图片 • 测试集:644张图片 • 分类类别: 垃圾(Sampah) • 垃圾(Sampah) • 标注格式:YOLO格式,包含实例分割的多边形点坐标,适用于实例分割任务。 • 数据格式:图片文件 二、适用场景 • 智能垃圾检测系统开发:数据集支持实例分割任务,帮助构建能够自动识别和分割图像中垃圾区域的AI模型,适用于智能清洁机器人、自动垃圾桶等应用。 • 环境监控与管理:集成到监控系统中,用于实时检测公共区域的垃圾堆积,辅助环境清洁和治理决策。 • 计算机视觉研究:支持实例分割算法的研究和优化,特别是在垃圾识别领域,促进AI在环保方面的创新。 • 教育与实践:可用于高校或培训机构的AI课程,作为实例分割技术的实践数据集,帮助学生理解计算机视觉应用。 三、数据集优势 • 精确的实例分割标注:每个垃圾实例都使用详细的多边形点进行标注,确保分割边界准确,提升模型训练效果。 • 数据多样性:包含多种垃圾物品实例,覆盖不同场景,增强模型的泛化能力和鲁棒性。 • 格式兼容性强:YOLO标注格式易于与主流深度学习框架集成,如YOLO系列、PyTorch等,方便研究人员和开发者使用。 • 实际应用价值:直接针对现实世界的垃圾管理需求,为自动化环保解决方案提供可靠数据支持,具有重要的社会意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值