首页 文章 精选 留言 我的

精选列表

搜索[鸿蒙课程],共8032篇文章
优秀的个人博客,低调大师

SpringCloud课程:18.Gateway 网关服务

Gateway 网关服务 一、概述 Gateway是在Spring生态系统之上构建的API网关系统,基于Spring5 Springboot2 和Project Reactor等技术 Gateway旨在提供一种简单而有效的方式来对API进行路由 ,以及提供一些强大的过滤器功能,例如熔断、限流、重试等。 二、作用 作用 反向代理 鉴权 流量控制 熔断 日志监控 三、三大核心概念 Route(路由) 路由是构建网关的基本模块,由ID,URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由 Predicate 断言 参考java8的java.util.function.Predicate 开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由 Filter 过滤 指Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或之后对请求进行修改 总结: web请求通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制 predicate就是我们的匹配条件, 而Filter可以理解为一个无所不能的过滤器,有了这两个元素再加上目标Uri 就可以实现一个具体的路由。 四、Gateway工作流 客户端向SpringCloudGateway发出请求。然后在GatewayHandlerMapping中找到与请求相匹配的路由,将其发送到GatewayWebHandler. Handle再通过指定的过滤链来将请求发送到我们实际的服务执行业务逻辑 ,然后返回。 过滤器可能会在发送代理请求之前"pre" 或之后 “post”执行业务逻辑 Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量控制、日志输出、协议转换等,在“post”类型的过滤器可以做响应内容、响应头的修改,日志的输出,流量监控等有非常重要的作用 五、入门配置 1.新建modulecloud-gateway-gateway9527 2.pom 需要移除spring-boot-starter-web 否则报错 Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time. Please remove spring-boot-starter-web dependency. <dependencies> <!--gateway--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--eureka-client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 3.yml server: port: 9527 spring: application: name: cloud-gateway eureka: instance: hostname: cloud-gateway-service client: register-with-eureka: true fetchRegistry: true service-url: defaultZone: http://eureka7001.com:7001/eureka 4.main @SpringBootApplication @EnableEurekaClient public class GateWayMain9527 { public static void main(String[] args) { SpringApplication.run(GateWayMain9527.class,args); } } 5.通过网关访问8001的接口 映射两个接口 /payment/lb /payment/get/{id} YML新增网关配置: 新增spring.cloud.gateway.routes部分 server: port: 9527 spring: application: name: cloud-gateway cloud: gateway: routes: - id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: http://localhost:8001 #匹配后提供服务的路由地址 predicates: - Path=/payment/get/** # 断言,路径相匹配的进行路由 - id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: http://localhost:8001 #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** # 断言,路径相匹配的进行路由 eureka: instance: hostname: cloud-gateway-service client: register-with-eureka: true fetchRegistry: true service-url: defaultZone: http://eureka7001.com:7001/eureka 启动7001、cloud-provider-payment8001、9527 访问 http://localhost:9527/payment/get/1 6.YML配置说明 Gateway网关路由有两种配置方式 6.1 在YML中配置 6.2 代码中注入RouteLocator的Bean 参考:https://spring.io/projects/spring-cloud-gateway com.zhl.springcloud.config.GateWayConfig @Configuration public class GateWayConfig { @Bean public RouteLocator customeRouteLocator(RouteLocatorBuilder builder){ RouteLocatorBuilder.Builder routes = builder.routes(); routes.route("path_route_atguigu1", r->r.path("/guonei") .uri("http://news.baidu.com/guonei")).build(); return routes.build(); } } 6.3 测试访问 http://localhost:9527/guonei跳转http://news.baidu.com/guonei 六、通过微服务名实现动态路由 默认情况下GateWay会根据注册中心注册的服务列表 以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能。 1.启动Eureka和服务提供者 8001 8002 2.YML 1.spring.cloud.gateway.discovery.locator.enabled:true 2.spring.cloud.gateway.routes[0].uri:lb://cloud-payment-service #匹配后提供服务的路由地址 spring.cloud.gateway.routes[1].uri:lb://cloud-payment-service server: port: 9527 spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由 routes: - id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/payment/get/** # 断言,路径相匹配的进行路由 - id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** # 断言,路径相匹配的进行路由 eureka: instance: hostname: cloud-gateway-service client: register-with-eureka: true fetchRegistry: true service-url: defaultZone: http://eureka7001.com:7001/eureka 3.测试 访问:http://localhost:9527/payment/lb 8001/8002 七、Predicate的使用 1.Predicate是什么 2.RoutePredicateFactories是什么 查看启动的后台信息: Spring Cloud Gateway将路由匹配作为SpringWebFlux HandlerMapping基础架构的一部分 SpringCloudGateway包括许多内置的RoutePredicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个RoutePredicate工厂可以进行组合 Spring Cloud Gateway创建Route对象时,使用RoutePredicateFactory创建Predicate对象,Predicate对象可以赋值给Route。SpringCloudGateway包含许多内置的RoutePredicateFatories 3.常用的Route Predicate 参考官网: https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/#gateway-request-predicates-factories 1.After Route Predicate 在时间之后 使用 ZonedDateTime.now()获取时间 - id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** # 断言,路径相匹配的进行路由 - After=2020-02-21T15:51:37.485+08:00[Asia/Shanghai] 2.Before Route Predicate 在时间之前 3.Between Route Predicate 时间之间 4.Cookie Route Predicate - id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** # 断言,路径相匹配的进行路由 #- After=2020-02-21T15:51:37.485+08:00[Asia/Shanghai] - Cookie=username,zzyy 不带cookie访问 C:\Users\Administrator>curl http://localhost:9527/payment/lb {"timestamp":"2020-12-04T14:16:14.906+00:00","path":"/payment/lb","status":404,"error":"Not Found",...... 带上cookie访问 C:\Users\Administrator>curl http://localhost:9527/payment/lb --cookie "username=zzyy" 8002 5.Header - id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** # 断言,路径相匹配的进行路由 - Header=X-Request-Id, \d+ # 请求头要有X-Request-Id属性并且值为整数的正则表达式 C:\Users\Administrator>curl http://localhost:9527/payment/lb -H "X-Request-Id:1234" 8002 C:\Users\Administrator>curl http://localhost:9527/payment/lb -H "X-Request-Id:aaaa" {"timestamp":"2020-12-04T14:22:01.354+00:00","path":"/payment/lb","status":404,"error":"Not Found", 6.Host Host Route Predicate接收一组参数,一组匹配的域名列表,这个模板时一个ant分割的模板,用.号作为分隔符它通过参数中的主机地址作为匹配规则。 7.Method 8.Path 9.Query 10.小结 八、Filter的使用 指的是Spring框架中GatewayFilter的实例,使用过滤器,可以再请求被路由前或之后对请求进行修改。 路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路由过滤器适用于特定路由。Spring Cloud Gateway包括许多内置的GatewayFilter工厂 1.声明周期 Pre Post 2.种类 GatewayFilter:单一的 GlobalFilter:全局的 3.常用的GatewayFilter AddRequestParameter 4.自定义过滤器 A.两个主要接口 B.作用 全局日志记录 统一网关鉴权... C.案例代码 新增组件 :com.zhl.springcloud.filter.MyLogGateWayFilter @Component @Slf4j public class MyLogGateWayFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("*****come in MyLogGateWayFilter: "+new Date()); String name =exchange.getRequest().getQueryParams().getFirst("uname"); if (name==null){ log.info("***用户名为null ,非法用户***"); exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE); return exchange.getResponse().setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { /*加载过滤器的顺序,顺序越小优先级越高*/ return 0; } } D.测试 C:\Users\Administrator>curl http://localhost:9527/payment/lb?uname=z3 8002

优秀的个人博客,低调大师

Docker系列课程01-Docker简介

原文:http://www.itmuch.com/docker/01-docker-summary/ 1.1 Docker简介 Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可减少从编写到部署运行代码的周期。 TIPS (1) Docker官方网站:https://www.docker.com/ (2) Docker GitHub:https://github.com/docker/docker 1.2 版本与迭代计划 近日,Docker发布了Docker 17.06。进入Docker 17时代后,Docker分成了两个版本:Docker EE和Docker CE,即:企业版(EE)和社区版(CE)。 1.2.1 版本区别 Docker EE(企业版) Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。 Docker EE提供三个服务层次: 服务层级 功能 Basic 包含用于认证基础设施的Docker平台Docker公司的支持经过 认证的、来自Docker Store的容器与插件 Standard 添加高级镜像与容器管理LDAP/AD用户集成基于角色的访问控制(Docker Datacenter) Advanced 添加Docker安全扫描连续漏洞监控 大家可在该页查看各个服务层次的价目:https://www.docker.com/pricing 。 Docker CE Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。事实上,Docker CE 17.03,可理解为Docker 1.13.1的Bug修复版本。因此,从Docker 1.13升级到Docker CE 17.03风险相对是较小的。 大家可前往Docker的RELEASE log查看详情https://github.com/docker/docker/releases 。 Docker公司认为,Docker CE和EE版本的推出为Docker的生命周期、可维护性以及可升级性带来了巨大的改进。 1.2.2 版本迭代计划 Docker从17.03开始,转向基于时间的YY.MM 形式的版本控制方案,类似于Canonical为Ubuntu所使用的版本控制方案。 Docker CE有两种版本: edge版本每月发布一次,主要面向那些喜欢尝试新功能的用户。 stable版本每季度发布一次,适用于希望更加容易维护的用户(稳定版)。 edge版本只能在当前月份获得安全和错误修复。而stable版本在初始发布后四个月内接收关键错误修复和安全问题的修补程序。这样,Docker CE用户就有一个月的窗口期来切换版本到更新的版本。举个例子,Docker CE 17.03会维护到17年07月;而Docker CE 17.03的下个稳定版本是CE 17.06,这样,6-7月这个时间窗口,用户就可以用来切换版本了。 Docker EE和stable版本的版本号保持一致,每个Docker EE版本都享受为期一年的支持与维护期,在此期间接受安全与关键修正。 image.png 1.2.3 参考文档 ANNOUNCING DOCKER ENTERPRISE EDITION:https://blog.docker.com/2017/03/docker-enterprise-edition/ 1.3 Docker的发展历程 发展历程 Docker版本 Docker基于{}实现 Docker 0.7之前 基于LXC Docker0.9后 改用libcontainer Docker 1.11后 改用runC和containerd 表格名词对应官网 LXC:https://linuxcontainers.org/lxc/introduction/ libcontainer:https://github.com/docker/libcontainer runC:https://github.com/opencontainers/runc containerd:https://github.com/containerd/containerd 各名词之间的关系 OCI:定义了容器运行的标准,该标准目前由libcontainer和appc的项目负责人(maintainer)进行维护和制定,其规范文档作为一个项目在GitHub上维护。 runC(标准化容器执行引擎):根据根据OCI规范编写的,生成和运行容器的CLI工具,是按照开放容器格式标准(OCF, Open Container Format)制定的一种具体实现。由libcontainer中迁移而来的,实现了容器启停、资源隔离等功能。 containerd:用于控制runC的守护进程,构建在OCI规范和runC之上。目前內建在Docker Engine中,参考文档:https://blog.docker.com/2015/12/containerd-daemon-to-control-runc/ ,译文:http://dockone.io/article/914 浅谈发展历程 时序:Docker大受欢迎 - 与CoreOS相爱相杀 - rkt诞生 - 各大厂商不爽 - OCI制定(2015-06) - 成立CNCF(2015-07-21) - Kubernetes 1.0发布; CNCF:云原生计算基金会,由谷歌联合发起,现隶属于Linux基金会。 拓展阅读 Docker背后的标准化容器执行引擎——runC:http://www.infoq.com/cn/articles/docker-standard-container-execution-engine-runc Docker、Containerd、RunC...:你应该知道的所有:http://www.infoq.com/cn/news/2017/02/Docker-Containerd-RunC Google宣布成立CNCF基金会,Kubernetes 1.0正式发布:http://dockone.io/article/518 1.4 Docker快速入门 执行如下命令,即可启动一个Nginx容器 docker run -d -p 91:80 nginx 1.5 Docker架构 我们来看一下来自Docker官方文档的架构图,如图所示。 docker-architecture.png 图12-1 Docker架构图 我们来讲解图中包含的组件。 (1) Docker daemon(Docker守护进程) Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。我们可通过Docker客户端与之通信。 (2) Client(Docker客户端) Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。 (3) Images(Docker镜像) Docker镜像是一个只读模板,它包含创建Docker容器的说明。它和系统安装光盘有点像——我们使用系统安装光盘安装系统,同理,我们使用Docker镜像运行Docker镜像中的程序。 (4) Container(容器) 容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。我们可通过Docker API或者CLI命令来启停、移动、删除容器。 (5) Registry Docker Registry是一个集中存储与分发镜像的服务。我们构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,我们就需要手动拷贝。此时,我们可借助Docker Registry来避免镜像的手动拷贝。 一个Docker Registry可包含多个Docker仓库;每个仓库可包含多个镜像标签;每个标签对应一个Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。 Docker Registry可分为公有Docker Registry和私有Docker Registry。最常用的Docker Registry莫过于官方的Docker Hub,这也是默认的Docker Registry。Docker Hub上存放着大量优秀的镜像,我们可使用Docker命令下载并使用。 1.6 Docker与虚拟机 docker-vs-vm.png Hypervisor层被Docker Engine取代。 Hypervisor:https://baike.baidu.com/item/hypervisor/3353492 虚拟化粒度不同 虚拟机利用Hypervisor虚拟化CPU、内存、IO设备等实现的,然后在其上运行完整的操作系统,再在该系统上运行所需的应用。资源隔离级别:OS级别 运行在Docker容器中的应用直接运行于宿主机的内核,容器共享宿主机的内核,容器内部运行的是Linux副本,没有自己的内核,直接使用物理机的硬件资源,因此CPU/内存利用率上有一定优势。资源隔离级别:利用Linux内核本身支持的容器方式实现资源和环境隔离。 拓展阅读 《Docker、LXC、Cgroup的结构关系》:http://speakingbaicai.blog.51cto.com/5667326/1359825/ 1.7 Docker应用场景 八个Docker的真实应用场景:http://dockone.io/article/126

优秀的个人博客,低调大师

华为鸿蒙OS 尝鲜

1.前序部分 1.1 官网: https://www.harmonyos.com 网上搜索第一个不是官方是三方的 1.2.IDE下载位置: https://device.harmonyos.com/cn/ide 1.3.源码位置: https://device.harmonyos.com/cn/docs/start/get-code/oem_sourcecode_guide-0000001050769927 1.4.安装时候启动会提示下载SDK,点击取消,搜索SDK,重新自定义SDK路径。 我把所有的SDK都按照上,打勾会自动下载。 2. 创建的项目 点击创建项目,发现现在支持有三种类型 2.1 TV 设备应用 2.2 Wearable 可穿戴设备应用 2.3 Lite Wearable 可穿戴设备(Lite)应用

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册