第九节:统一网关Gateway

微服务SpringGateway解析部署使用全流程 核心功能有三个:路由:用于设置转发地址的断言:用来判断真实应该请求什么地址过滤器:可以过滤地址和处理参数网关是后台服务的统一入口,类似于平时网络里提到的网关。 阅读详情

1、为什么需要网关

截屏2022-04-05 下午4.56.48

当我们有很多的微服务,如果直接对外开放访问,比较危险。因此我们增加一层网关。

对用户请求做身份认证、权限校验,将用户请求路由到微服务,并实现负载均衡对用户请求做限流。

2、网关的技术实现

在SpringCloud中网关的实现包括两种:

1、gateway

2、zuul

Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

3、搭建网关服务

3.1、创建新模块

项目中创建新模块:gateway,然后创建必要的文件和路径

截屏2022-04-05 下午5.06.01

3.2、引入依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

gateway也作为一个服务,所以需要注入nacos

3.3、编写配置

spring:
    application:
        name: gateway
    profiles:
        active: dev
    cloud:
        nacos:
            server-addr: 192.168.0.105:8848
            discovery:
                namespace: 8924617a-1794-4b76-9e56-120e1a7c05dc #dev
        gateway:
            routes: #网管路由配置
              - id: user-service #路由标识,必须唯一
                uri: lb://userservice #路由的目标地址
                predicates: #路由断言
                    - Path=/user/** #路径断言,判断路径是否以/user开头,如果是则符合
              - id: order-service
                uri: lb://orderservice
                predicates:
                    - Path=/order/**

3.4、启动测试

启动服务,然后用gateway的服务访问order和service。

3.5、服务路由

截屏2022-04-05 下午5.17.35

网关通过路由配置,根据配置,将不同的请求路由到不同的服务中。

3.6、总结

路由id:路由的唯一标示

路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡

路由断言(predicates):判断路由的规则,

路由过滤器(filters):对请求或响应做处理

4、路由断言工厂

predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地

4.1 介绍

路由断言工厂Route Predicate Factory

我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件

例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的

像这样的断言工厂在SpringCloudGateway还有十几个

名称说明示例
After是某个时间点后的请求- After=2037-01-20T17:42:47.789-07:00[America/Denver]
Before是某个时间点之前的请求- Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]
Between是某两个时间点之前的请求- Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]
Cookie请求必须包含某些cookie- Cookie=chocolate, ch.p
Header请求必须包含某些header- Header=X-Request-Id, \d+
Host请求必须是访问某个host(域名)- Host=.somehost.org,.anotherhost.org
Method请求方式必须是指定方式- Method=GET,POST
Path请求路径必须符合指定规则- Path=/red/{segment},/blue/**
Query请求参数必须包含指定参数- Query=name, Jack或者- Query=name
RemoteAddr请求者的ip必须是指定范围- RemoteAddr=192.168.1.1/24
Weight权重处理

书写格式可以再spring cloud官网中看:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-after-route-predicate-factory

5、路由过滤器

5.1、路由过滤器 GatewayFilter

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理.

截屏2022-04-05 下午5.30.47

用户请求经过网关的时候,首先经过路由,然后经过过滤器链,对请求头、参数等进行处理。

服务返回结果也会经过网关中的过滤器。

5.2、过滤器工厂 GatewayFilterFactory

Spring提供了31种不同的路由过滤器工厂。例如:

名称说明
AddRequestHeader给当前请求添加一个请求头
RemoveRequestHeader移除请求中的一个请求头
AddResponseHeader给响应结果中添加一个响应头
RemoveResponseHeader从响应结果中移除有一个响应头
RequestRateLimiter限制请求的流量
…

官网:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories

5.3、默认过滤器

如果要对所有的路由都生效,则可以将过滤器工厂写到default下

spring:
    application:
        name: gateway
    profiles:
        active: dev
    cloud:
        nacos:
            server-addr: 192.168.0.105:8848
            discovery:
                namespace: 8924617a-1794-4b76-9e56-120e1a7c05dc #dev
        gateway:
            routes: #网管路由配置
              - id: user-service #路由标识,必须唯一
                uri: lb://userservice #路由的目标地址
                predicates: #路由断言
                    - Path=/user/** #路径断言,判断路径是否以/user开头,如果是则符合
              - id: order-service
                uri: lb://orderservice
                predicates:
                    - Path=/order/**
                    - Before=2031-01-20T17:42:47.789-07:00[Asia/Shanghai]
                filters:
                    - AddRequestHeader=X-Request-other, hahah
            default-filters:
                - AddRequestHeader=X-Request-other, default

default-filters配置在routes下,对所有的路由生效,filters对单个服务生效。

优先级:默认的>单个,所以优先级低的会覆盖优先级高的

6、全局过滤器

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。定义方式是实现GlobalFilter接口。

public interface GlobalFilter {

	/**
	 * 处理当前请求,有必要的话通过{@link GatewayFilterChain}将请求交给下一个过滤器处理
	 * @param exchange 请求上下文,里面可以获取Request、Response等信息
	 * @param chain 用来把请求委托给下一个过滤器 
	 * @return {@code Mono<Void>} 返回标示当前过滤器业务结束
	 */
	Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);

}

6.1、使用

@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> queryParams = request.getQueryParams();
        String authorization = queryParams.getFirst("authorization");
        if("admin".equals(authorization)){
           return chain.filter(exchange);
        }
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        return exchange.getResponse().setComplete();
    }
}

@order定义用来决定多个过滤器生效的顺序

7、过滤器执行顺序

请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器。

截屏2022-04-05 下午5.56.36

通过适配器,适配为GatewayFilter使用。

  • 每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前。
  • GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定
  • 路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增。
  • 当过滤器的order值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter的顺序执行。

可以参考下面几个类的源码来查看:

org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters()方法是先加载defaultFilters,然后再加载某个route的filters,然后合并。

org.springframework.cloud.gateway.handler.FilteringWebHandler#handle()方法会加载全局过滤器,与前面的过滤器合并后根据order排序,组织过滤器链

8、跨域

跨域:域名不一致就是跨域,主要包括:

域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com

域名相同,端口不同:localhost:8080和localhost8081

跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题

解决方案:CORS

spring:
  cloud:
    gateway:
      globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站的跨域请求
              - "http://localhost:8090"
              - "http://www.leyou.com"
            allowedMethods: # 允许的跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期

9、限流

对应用服务器的请求做限制,避免因过多请求而导致服务器过载甚至宕机。

限流算法常见的包括三种:

1、计数器算法,又包括窗口计数器算法、滑动窗口计数器算法

2、漏桶算法(Leaky Bucket)

3、令牌桶算法(Token Bucket)

9.1、计数器算法

固定窗口计数器算法概念如下:

1.将时间划分为多个窗口;

2.在每个窗口内每有一次请求就将计数器加一,当时间到达下一个窗口时,计数器重置。

3.如果计数器超过了限制数量,则本窗口内所有的请求都被丢弃。

截屏2022-04-05 下午6.21.21

9.2、漏桶算法

漏桶算法说明:

1、将每个请求视作"水滴"放入"漏桶"进行存储;

2、"漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;

3、如果"漏桶"满了则多余的"水滴"会被直接丢弃。

截屏2022-04-05 下午6.22.18

9.3、令牌桶算法

漏桶算法说明:

1、以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃

2、请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理

3、如果令牌桶中没有令牌,则请求等待或丢弃

截屏2022-04-05 下午6.23.49

微服务架构 --- Gateway网关的项目实战教学 数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。 阅读详情

相关推荐

【gateway 入门】5、创建一个简单的Gateway服务

"Gateway" 是一个多义词,在不同的领域有不同的意义。它在计算机网络中是连接不同网络的设备或节点,能在不同协议、数据格式和体系结构之间进行转换,使得不同网络之间能够互相通信;在电子商务中是处理和授权在线支付的服务,确保交易安全顺利进行;在旅游和交通中指的是主要的出入口或枢纽,如国际机场。无论在哪个领域,Gateway 的核心概念都是作为“连接”和“通道”,它是实现两个不同系统或区域之间互动的重要桥梁。

weixin_52938153的博客 2022

Gateway服务网关使用教程

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

qq_44732432的博客 4093

rk3566-11.0新增device分区

1.增加块设备 2.修改根目录节点权限 3.开机启动自动挂载 增加块设备 1.修改parameter.txt文件,新增块设备大小及命名 device/rockchip/rk356x/rk3566_r/parameter.txt FIRMWARE_VER: 11.0 MACHINE_MODEL: rk3566_r MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE

weixin_51115260的博客 3380

Gateway服务网关

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 1.为什么需要网关 Gateway网关是我们服务的守门神,所有微服务的统一入口。(身份认证和权限校验;服务路由、负载均衡) 网关的核心功能特性: 请求路由 权限控制 限流 权限控制:网关作为微服务入口,需要校验

weixin_50268501的博客 723

ZYNQ平台AXI DMA传输避坑指南:如何快速定位‘errors:200‘等中断故障

本文详细解析了ZYNQ平台AXI DMA传输中常见的'errors:200'等中断故障,提供了从寄存器解析到压力测试的完整解决方案。通过深入分析XILINX_DMA中断机制、错误分类及五步排查法,帮助开发者快速定位并解决DMA传输问题,提升系统稳定性与性能。

weixin_29159613的博客 438

YOLO-FastestV2从零部署到移动端推理实战手册

本文详细介绍了YOLO-FastestV2从零开始的完整部署流程,涵盖环境搭建、模型训练、格式转换及移动端部署。通过实战步骤,指导开发者将这一轻量级目标检测模型成功部署到Android设备,实现实时推理。文章重点解析了PyTorch到NCNN的模型转换与优化,助力移动端AI应用开发。

l1k9j8h7g6的博客 668

【gateway 入门】3、安装和配置Gateway

"Gateway" 是一个多义词,在不同的领域有不同的意义。它在计算机网络中是连接不同网络的设备或节点,能在不同协议、数据格式和体系结构之间进行转换,使得不同网络之间能够互相通信;在电子商务中是处理和授权在线支付的服务,确保交易安全顺利进行;在旅游和交通中指的是主要的出入口或枢纽,如国际机场。无论在哪个领域,Gateway 的核心概念都是作为“连接”和“通道”,它是实现两个不同系统或区域之间互动的重要桥梁。

weixin_52938153的博客 4084

WblockCloneObjects克隆一个图纸内的实体包括块参照,同名块参照的处理

public static void HeBingTu2(double lieJu, List<string> filePaths) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (DocumentLock docLock = doc.Lock...

1108

【Gateway】简单入门及使用

网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作,也不能构建成 war 包。

GuLuZaizzz的博客 1257

Google Play上架:谷歌2024年5月份审核政策改动,审核强度逐步提升

Google Play上架:谷歌2024年5月份审核政策改动,审核强度逐步提升

专业解决各种上架过包问题,专业团队专业处理 3186

【Mini KITTI】KITTI数据集简介 — Mini KITTI

为了快速进行算法调试、训练、评估和验证,以及快速下载,制作了一个mini kitti数据集,数据集的文件目录结构与完整KITTI数据集保持一致。其中,小型的KITTI数据集,即 mini kitti保存了20个训练样本和5个测试样本。下载地址为:。 关于KITTI各个部分的介绍请分别参考以下内容: ...

叶子的博客 7533

新手小白Gateway快速入门

一、简介 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.x,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式,目标是替代 Netflix Zuul,底层是Netty网络编程框架-ServerSocket,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,可用于服务安全,统一服务入口管理,负载均衡,限流,鉴权 二、快速入门 需求:通过网关

zhanlijuan 2502

【教程4>第8章>第10节】OFDM完整通信链路项目的FPGA开发4——插入导频

本文介绍了基于MATLAB和Verilog的导频插入设计与实现方法。首先回顾了MATLAB中导频插入的算法实现,展示了每32个数据插入一个导频的设计。接着详细说明了Verilog硬件实现方案,包括导频序列定义、计数器设计、FIFO模块等关键部分。通过仿真测试验证了设计的正确性,输出了插入导频后的序列、导频序列以及调整时序后的序列。最后提供了相关视频教程资源,帮助读者理解设计过程。该设计实现了数据与导频的精确插入,为OFDM等通信系统开发提供了实用参考。

FPGA/MATLAB学习教程/源码/项目合作开发 395

gateway统一网关

一、认识网关 二、搭建网关 2.编写启动类 其实就是简单的springboot项目 3.编写yml配置文件

weixin_45390688的博客 625

[系统安全] 三十二.恶意代码检测(2)常用技术详解及总结

前文从产业界和学术界分别详细讲解恶意代码攻击溯源的相关知识,在学术界方面,用类似于综述来介绍攻击追踪溯源的不同方法;在产业界方面,主要参考李东宏老师从企业恶意样本分析的角度介绍溯源工作。这篇文章将详细总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。希望这篇文章对您有所帮助,如果文章中存在错误、理解不到位或侵权的地方,还请告知作者与海涵。且看且珍惜,加油~

杨秀璋的专栏 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

GatewayFilter

网关过滤器 GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理。 GatewayFilter Factories有30几个。 eg: 给所有进入userservice的请求添加一个请求头:Truth=NO.1 实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器。 server: port: 10010 #网关端口 spring: application: name: geteway #服务

lqbz的总结 2764

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SpringCloud笔记(五)——Gateway

Gateway 学习视频链接: 黑马程序员:https://www.bilibili.com/video/BV1LQ4y127n4 1、统一网关Gateway 1.1、为什么需要网关? 网关有如下功能: 身份认证和权限校验 服务路由、负载均衡 请求限流 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。 路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负

一名编程小白的Java学习日志 1388

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

两天学会微服务网关Gateway-Gateway HelloWorld快速入门

两天学会微服务网关Gateway-Gateway HelloWorld快速入门

java1234的博客 608

[小白学微服务] 网关 GateWay 的基础使用

点击进入gateway中文文档gateway提供了一个建立在Spring生态系统之上的API网关,包括Spring 6、Spring Boot 3 和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为其提供跨领域的关注,如:安全、监控/指标和容错。以上就是gateway的基本使用了,新人作者,还有不足,欢迎大佬多多补充,多多关照哈~拜拜↑拜拜↓拜拜↑。

qq_62859700的博客 1952

网关 GateWay 的使用详解、路由、过滤器、跨域配置

???? 这是一个或许对你有用的社群???? 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:《项目实战(视频)》:从书中学,往事上“练”《互联网高频面试题》:面朝简历学习,春暖花开《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题《精进 Java 学习指南》:系统学习,互联网主流技术栈《必读 Java 源码专栏》:知其然,知其所以然????这是一个或许...

芋艿V 1128

Spring Boot Gateway 教程:从入门到精通

Spring Cloud Gateway 作为微服务架构中的重要组件,提供了强大而灵活的路由与过滤功能。通过本教程,您应该已经了解了如何集成 Spring Cloud Gateway、如何配置路由规则以及如何利用其丰富的功能来满足各种业务需求。YML 配置文件是配置 Spring Cloud Gateway 路由的主要方式,通过合理配置routespredicates和filters,可以实现复杂的路由逻辑和请求处理。同时,结合服务发现、负载均衡、限流、熔断等高级功能,可以构建高可用、高性能的微服务网关。

Rysxt_的博客 1962

统一网关Gateway的配置

gateway的配置以在idea中的配置为例进行介绍

m0_64021225的博客 2009

spring cloud gateway基于Host的路由失败

请求通过nginx到达spring cloud gateway,想要使用Host的predicate路由,却始终失败,后来发现是请求通过nginx后会丢失host请求头数据,需要在nginx配置文件中加上proxy_set_header Host $host。

weixin_42270288的博客 1130

gateway的基本使用

gateway的基本使用和三大核心

一个菜鸡的博客 5363

SpringCloud【进阶】07:GateWay服务网关实战教程

1、什么是gateway gateway官网,点击查看 SpringCloud Gateway是Spring Cloud的一个全新项目,基于Spring 5.0+Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供—种简单有效的统一的API路由管理方式。 SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。 Spring Cloud Gateway的目标提供统一

weixin_40964170的博客 723

微服务之Gateway实战讲解,小白必备哦!

文章目录1、Spring Cloud GateWay概述2、Spring Cloud Gateway特性3、为什么选择GateWay4、GateWay工作流程5、环境搭建6、GateWay网关路由配置方式7、GateWay配置动态路由8、GeteWay常用Predicate(断言)8.1、After 匹配指定时间之后的请求8.2、Cookie 匹配cookie里带有指定名称和满足正则的值的请求8.3、Header 匹配header里带有指定名称和满足正则的值的请求9、GateWay过滤器(Filter)

Code皮皮虾的博客 2705
上一篇: 第八节:http客户端Feign的使用
下一篇: 第10节:Docker入门+下载安装配置
七号公园的忧伤
七号公园的忧伤 新星创作者: Java技术领域 新星创作者: Java技术领域
博客等级 码龄6年 4857粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七号公园的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值