OpenFeign和Gateway
OpenFeign和Gateway
- 一.OpenFeign介绍
- 二.快速上手
- 1.引入依赖
- 2.开启openfeign的功能
- 3.编写客户端
- 4.修改远程调用代码
- 5.测试
- 三.OpenFeign参数传递
- 1.传递单个参数
- 2.多个参数、传递对象和传递JSON字符串
- 3.最佳方式写代码
- 继承的方式
- 抽取的方式
- 四.部署OpenFeign
- 五.统一服务入口-Gateway
- 1.网关
- 2.常见网关实现
- 六.快速上手
- 七.Gateway
- 1.Predicate
- 2.Route Predicate Factories
- 3.Gateway Filter Factories(网关过滤器工厂)
- GatewayFilter
- GlobalFilter
- 过滤器执行顺序
- ⾃定义过滤器
- 八.部署Gateway
一.OpenFeign介绍
OpenFeign是⼀个声明式的Web Service 客户端。它让微服务之间的调⽤变得更简单,类似controller
调⽤service,只需要创建一个接口,然后添加注解即可使⽤OpenFeign。
OpenFeign的前身:
Feign 是 Netflix 公司开源的一个组件。
- 2013年6月:Netflix发布 Feign的第一个版本 1.0.0
- 2016年7月:Netflix发布Feign的最后一个版本 8.18.0
- 2016年:Netflix 将 Feign 捐献给社区
- 2016年7月:OpenFeign 的首个版本 9.0.0 发布,之后一直持续发布到现在.
可以简单理解为Netflix Feign 是OpenFeign的祖先。或者说OpenFeign 是Netflix Feign的升级版。OpenFeign 是Feign的一个更强大更灵活的实现。
Spring Cloud Feign
Spring Cloud Feign 是 Spring 对 Feign 的封装,将 Feign 项目集成到 Spring Cloud生态系统中。
受 Feign 更名影响,Spring Cloud Feign 也有两个 starter
- spring-cloud-starter-feign
- spring-cloud-starter-openfeign
由于Feign的停更维护,对应的,我们使用的依赖是 spring-cloud-starter-openfeign
OpenFeign 官方文档
Spring Cloud Feign官方文档
二.快速上手
1.引入依赖
在订单项目中引入openfeign的依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
2.开启openfeign的功能
给订单项目的启动类加上openfeign的注解:
3.编写客户端
在订单服务中写一个api,value代表微服务的名称,path代表Feign客户端的统一前缀
4.修改远程调用代码
5.测试
三.OpenFeign参数传递
1.传递单个参数
ProductController:
ProductAPI:
在Order项目中写一个FeignController:
2.多个参数、传递对象和传递JSON字符串
ProductController:
ProductAPI:
FeignController:
3.最佳方式写代码
继承的方式
创建一个公共的包来提取公共代码,创建包的方式和之前相同:
再将ProductAPI里面写的代码复制到新的ProductAPI项目的包中的,写成接口的形式:
此时需要将ProductInfo引入到这个项目中,但是其他的几个微服务项目都有这个类于是,可以将这个代码复制到这个API项目中,其他的微服务项目直接删除原来的ProductInfo这个类,通过API项目打包的形式放入到起到微服务的POM文件中:
-
先进行install,把当前工程打成jar包,放在Maven的本地仓库
-
打包好后对其进行引入后,就会有POM文件自动生成:
-
实现接口:
-
订单的微服务中ProductAPI继承接口:
-
使用了ProductInfo和继承了或者实现了ProductInterface都要将ProductInfo的包重新引入,并对方法进行一些修改。
抽取的方式
-
依旧是先建一个module,并在pom文件中引入对应的依赖:
-
将Order微服务的ProductAPI接口放到product-api微服务项目中的api包中,删除Order原有的api接口:
-
对product-api进行打包:
-
启动服务端
-
抽取调用方:
-
进行测试即可
四.部署OpenFeign
对两个服务进行打包,Maven打包默认是从远程仓库下载的,product-api 这个包在本地,有以下解决方案:
- 上传到Maven中央仓库(参考:如何发布Jar包到Maven中央仓库,比较麻烦)[不推荐]
- 搭建Maven私服,上传Jar包到私服 [企业推荐]
- 从本地读取Jar包 [个人学习阶段推荐]
前两种方法比较复杂,咱们使用第三种方式
- 从product-api的打包成功后的结果里找到本地Maven路径写到Order微服务的POM文件中:
- 上传到云服务器上:
- 启动jar包:
五.统一服务入口-Gateway
1.网关
API网关(简称网关)也是⼀个服务,通常是后端服务的唯一入口。它的定义类似设计模式中的Facade模式(门面模式,也称外观模式)。它就类似整个微服务架构的门面,所有的外部客户端访问,都需要经过它来进行调度和过滤。
网关核心功能:
权限控制: 作为微服务的入口,对用户进行权限校验,如果校验失败则进行拦截
动态路由: ⼀切请求先经过网关,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务
负载均衡:当路由的目标服务有多个时,还需要做负载均衡
限流: 请求流量过高时,按照网关中配置微服务能够接受的流量进行放行,避免服务压力过大
2.常见网关实现
业界常用的网关方式有很多,技术方案也较成熟,其中不乏很多开源产品,比如Nginx,Kong,Zuul,
Spring Cloud Gateway等。下面介绍两种常见的网关方案。
Zuul
Zuul 是 Netflix 公司开源的一个API网关组件,是Spring Cloud Netflix 子项目的核心组件之一,它可以
和 Eureka、Ribbon、Hystrix 等组件配合使用
在Spring Cloud Finchley正式版之前,Spring Cloud推荐的网关是Netflix提供的Zuul(此处指Zuu 1.X).
然而Netflix在2018年宣布一部分组件进入维护状态,不再进行新特性的开发。这部分组件中就包含Zuul
Spring Cloud Gateway
Spring Cloud Gateway 是Spring Cloud的⼀个全新的API网关项目,基于Spring + SpringBoot等技术
开发,目的是为了替换掉Zuul。
旨在为微服务架构提供一种简单而有效的途径来转发请求,并为他们提供横切关注点,比如:安全性,监控/指标和弹性。
在性能方面,根据官方提供的测试报告,Spring Cloud Gateway的RPS(每秒请求数)是Zuul的1.6倍。测
试报告参考
六.快速上手
- 创建项目和之前相同
- 引入网关的依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.example</groupId><artifactId>spring-cloud-gateway</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>gateway</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><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-loadbalancer</artifactId></dependency></dependencies></project>
- 写启动类:
- 写配置信息:
server:port: 10030 # ⽹关端⼝
spring:application:name: gateway # 服务名称cloud:nacos:discovery:server-addr: 1.95.194.117:8848gateway:routes: # ⽹关路由配置- id: order-service #路由ID, ⾃定义, 唯⼀即可uri: lb://order-service #⽬标服务地址predicates: #路由条件- Path=/order/**,/feign/**- id: product-service #路由ID, ⾃定义, 唯⼀即可uri: lb://product-service #⽬标服务地址predicates: #路由条件- Path=/product/**
- 测试
七.Gateway
1.Predicate
Predicate是Java 8提供的一个函数式编程接口,它接收一个参数并返回一个布尔值,用于条件过滤,请求参数的校验。
代码:
直接通过实现接口后,调用方法来使用:
直接是在创建对象的时候重写方法来使用:
使用lambda表达式的使用:
Predicate 的其他方法
- isEqual(Object targetRef):比较两个对象是否相等,参数可以为Null
- and(Predicate other):短路与操作,返回一个组成Predicate
- or(Predicate other):短路或操作,返回一个组成Predicate
- test(T t):传入一个Predicate参数,用来做判断
- negate(): 返回表示此Predicate逻辑否定的Predicate
2.Route Predicate Factories
Route Predicate Factories (路由断言工厂,也称为路由谓词工厂,此处谓词表示一个函数),在Spring
Cloud Gateway中,Predicate提供了路由规则的匹配机制。
我们在配置文件中写的断言规则只是字符串,这些字符串会被Route Predicate Factory读取并处理,转
变为路由判断的条件。比如前面章节配置的 Path=/product/** ,就是通过Path属性来匹配URL前缀是 /product 的请求。
这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory 来实现的。Spring Cloud Gateway默认提供了很多Route Predicate Factory,这些Predicate会分别匹配HTTP请求的不同属性,并且多个Predicate可以通过and逻辑进行组合。
更多参考
3.Gateway Filter Factories(网关过滤器工厂)
Predicate决定了请求由哪⼀个路由处理,如果在请求处理前后需要加⼀些逻辑,这就是Filter(过滤器)的
作用范围了。
Filter分为两种类型:Pre类型和Post类型。
Pre类型过滤器:路由处理之前执行(请求转发到后端服务之前执行),在Pre 类型过滤器中可以做鉴权,限流等。
Post类型过滤器:请求执行⾏完成后,将结果返回给客户端之前执行。
Spring Cloud Gateway 中内置了很多Filter,用于拦截和链式处理web请求。比如权限校验,访问超时等设定。
Spring Cloud Gateway从作用范围上,把Filter可分为GatewayFilter 和GlobalFilter。
GatewayFilter: 应用到单个路由或者一个分组的路由上。
GlobalFilter: 应用到所有的路由上,也就是对所有的请求生效。
GatewayFilter
GatewayFilter 同 Predicate 类似,都是在配置文件 application.yml 中配置,每个过滤器的逻辑都是固定的。比如 AddRequestParameterGatewayFilterFactory 只需要在配置文件中写AddRequestParameter,就可以为所有的请求添加⼀个参数,我们先通过⼀个例子来演示GatewayFilter如何使用。
快速上手:
- 添加yml配置
- order微服务中添加过滤器参数:
- 通过网管访问后,日志中打印出userName:
GatewayFilter详细介绍官网
Default Filters
前面的filter添加在指定路由下,所以只对当前路由生效,若需要对全部路由生效,可以使用spring.cloud.gateway.default-filters 这个属性需要⼀个filter的列表。
yml配置
spring:
cloud:
gateway:
default-filters:
- AddResponseHeader=X-Response-Default-Red, Default-Blue
- PrefixPath=/httpbin
GlobalFilter
lobalFilter是Spring Cloud Gateway中的全局过滤器,它和GatewayFilter的作用是相同的。
GlobalFilter 会应用到所有的路由请求上,全局过滤器通常用于实现与安全性,性能监控和日志记录等相关的全局功能。
Spring Cloud Gateway 内置的全局过滤器也有很多,比如:
- Gateway Metrics Filter:网关指标,提供监控指标
- Forward Routing Filter:用于本地forword,请求不转发到下游服务器。
- LoadBalancer Client Filter:针对下游服务,实现负载均衡。
更多过滤器参考:Global Filters
演示:
- 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 添加yml配置
spring:application:name: gateway # 服务名称cloud:nacos:discovery:server-addr: gateway:metrics:enabled: true
management:endpoints:web:exposure:include: "*"endpoint:health:show-details: alwaysshutdown:enabled: true
- 测试
过滤器执行顺序
一个项目中,既有GatewayFilter,又有 GlobalFilter时,执行的先后顺序是什么呢? 请求路由后,网关会把当前项目中的GatewayFilter和GlobalFilter合并到一个过滤器链(集合)中,并进行排序,依次执行过滤器。
每一个过滤器都必须指定一个int类型的order值,默认值为0,表示该过滤的优先级。order值越小,优先级越高,执行顺序越靠前。
- Filter通过实现Order接口或者添加@Order注解来指定order值。
- Spring Cloud Gateway提供的Filter由Spring指定.用户也可以自定义Filter,由用户指定。
- 当过滤器的order值⼀样时,会按照 defaultFilter > GatewayFilter > GlobalFilter的顺序执行
⾃定义过滤器
Spring Cloud Gateway提供了过滤器的扩展功能,开发者可以根据实际业务来⾃定义过滤器,同样自定
义过滤器也⽀持GatewayFilter 和 GlobalFilter两种.
自定义GatewayFilter
自定义GatewayFilter,需要去实现对应的接口 GatewayFilterFactory,Spring Boot 默认帮我们实现的抽象类是 AbstractGatewayFilterFactory,我们可以直接使用。
定义GatewayFilter
- 写一个Custom的Config
- 自定义一个CustomGatewayFilterFactory类:
- 增加一点yml的配置:
- 测试:
**自定义GlobalFilter **
GlobalFilter的实现比较简单,它不需要额外的配置,只需要实现GlobalFilter接口,自动会过滤所有的
Filter.
定义GlobalFilter:
八.部署Gateway
- 打包
- 把打好的jar包上传云服务器
- 再通过nohup命令启动jar包
相关文章:
OpenFeign和Gateway
OpenFeign和Gateway 一.OpenFeign介绍二.快速上手1.引入依赖2.开启openfeign的功能3.编写客户端4.修改远程调用代码5.测试 三.OpenFeign参数传递1.传递单个参数2.多个参数、传递对象和传递JSON字符串3.最佳方式写代码继承的方式抽取的方式 四.部署OpenFeign五.统一服务入口-Gat…...
openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解
1 先看openwrt时间,一定要保证时间和浏览器和服务器是一致的,不然无法更新 2 openwrt设置旁路由前先测试下,路由器能否ping通主路由,是否能够连接外网,好多旁路由设置完了,发现还不能远程好多就是旁路由本…...
ai如何赋能艺术教育
在数字化浪潮席卷全球的今天,人工智能(AI)作为第四次工业革命的核心驱动力,正以前所未有的速度重塑教育生态。艺术教育领域作为培养创造力、批判性思维与跨文化理解力的关键阵地,正经历着AI技术带来的深刻变革。本文将从技术赋能、教育范式革新、全球化协作三个维度,探讨…...
NocoBase 本周更新汇总:联动规则条件左侧支持变量
原文链接:https://www.nocobase.com/cn/blog/weekly-updates-20250424。 汇总一周产品更新日志,最新发布可以前往我们的博客查看。 NocoBase 目前更新包括的版本更新包括三个分支:main ,next和 develop。 main :截止…...
协作开发攻略:Git全面使用指南 — 第二部分 高级技巧与最佳实践
协作开发攻略:Git全面使用指南 — 第二部分 高级技巧与最佳实践 Git 是一种分布式版本控制系统,用于跟踪文件和目录的变更。它能帮助开发者有效管理代码版本,支持多人协作开发,方便代码合并与冲突解决,广泛应用于软件开…...
sass 变量
基本使用 如果分配给变量的值后面添加了 !default 标志 ,这意味着该变量如果已经赋值,那么它不会被重新赋值,但是,如果它尚未赋值,那么它会被赋予新的给定值。 如果在此之前变量已经赋值,那就不使用默认值…...
多级缓存架构深度解析:从设计原理到生产实践
多级缓存架构深度解析:从设计原理到生产实践 一、多级缓存架构核心定位与设计原则 1. 架构分层与角色定位 多级缓存通过分层存储、流量削峰、数据分级实现性能与成本的平衡,典型三层架构如下: 层级代表组件存储介质数据特征命中目标成本级…...
(51单片机)LCD展示动画(延时函数)(LLCD1602教程)
前言: 前面我们说过,之前LCD1602模块有点难,但是现在,我们通过几遍博客的学习,今天来讲一下LCD1602的原理 演示视频: LCD1602流动 源代码: main.c #include <STC89C5xRC.H> #include &q…...
12N60-ASEMI无人机专用功率器件12N60
编辑:LL 12N60-ASEMI无人机专用功率器件12N60 型号:12N60 品牌:ASEMI 封装:TO-220F 最大漏源电流:12A 漏源击穿电压:600V 批号:最新 RDS(ON)Max:0.68…...
[Redis] Redis最佳实践
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
arm64适配系列文章-第九章-arm64环境上sentinel的部署
ARM64适配系列文章 第一章 arm64环境上kubesphere和k8s的部署 第二章 arm64环境上nfs-subdir-external-provisioner的部署 第三章 arm64环境上mariadb的部署 第四章 arm64环境上nacos的部署 第五章 arm64环境上redis的部署 第六章 arm64环境上rabbitmq-management的部署 第七章…...
3dmax模型怎么处理3dtiles,制作制作B3DM格式文件
1咱们先打3dmax,或su或者其他软件建模型 2记住面一定一定要少,面一定不能多,也不要是VR材质,可以用插件一键处理 3导出fbx 4使用cesium把fbx转换 5这里可以坐标,因为要对地图位置 6转换出来了,3dtiles格式…...
雪花算法生成int64,在前端js的精度问题
1.问题背景 后端对视频生成唯一性id,在发送评论阶段,由于后端接收的json数据格式,设置videoId为int64。前端于是使用js的Number函数,进行字符串转换为数字,由于不清楚js的精度范围,产生了携带的videoId变化…...
软件测试报告包括哪些内容?可出专业软件测试方案的测评机构推荐
随着信息技术的快速发展,软件质量已经成为决定企业竞争力的重要因素之一。软件测试作为保障软件质量的关键环节,其成果汇总形成的“软件测试报告”在项目生命周期中扮演着重要角色。 软件测试报告就是用来反映测试工作全貌的报告。从测试准备、过程、结…...
dockercompose文件仓库
mysql version: 3 # 使用docker-compose的版本,根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限(确保MySQL容器可以读写这些目录) # chmod 777 /ho…...
Docker 的基本概念和优势以及在应用程序开发中的实际应用
Docker 是一种开源的容器化平台,可以让开发者将应用程序及其所有依赖项打包成一个独立的容器,从而实现应用程序的快速部署和运行。下面是 Docker 的基本概念和优势: 基本概念: 容器:一个轻量级、独立的运行环境,包含应用程序及其所有依赖项。镜像:一个只读的模板,用于创…...
JavaWeb:HtmlCss
快速入门 <html><head><title>HTML快速入门</title><head><body><h1>Hello HTML</h1><img src"1.png"></img></body> </html>开发工具vscode 常见便签&样式(新闻࿰…...
linux centOS7.9 No package docker-ce available
docker pull apache/apisix:3.2.2-centos Error response from daemon: missing signature key 处理方式如下: 问题:在纯净机里安装docker时报错No package docker-ce available。 解决办法: 1、更新yum,使用yum -y upgrade&#…...
机器学习(8)——主成分分析
文章目录 1. 主成分分析介绍2. 核心思想3. 数学基础4. 算法步骤4.1. 数据标准化:4.2. 计算协方差矩阵:4.3. 特征分解:4.4. 选择主成分:4.5 降维: 5. 关键参数6. 优缺点7. 改进变种8. 应用场景9. Python示例10. 数学推导…...
使用深度 Q 学习解决Lunar lander问题
使用深度 Q 学习解决Lunar lander问题 0. 前言1. 使用深度 Q 网络解决 Atari 游戏2. 定义环境3. 解决 Lunar lander 问题相关链接 0. 前言 深度 Q 学习模型只需观察状态作为输入就能够解决经典 Atari 游戏,这是一个重大突破,从那时起,深度强…...
centos7使用yum快速安装最新版本Jenkins-2.462.3
Jenkins支持多种安装方式:yum安装、war包安装、Docker安装等。 官方下载地址:https://www.jenkins.io/zh/download 本次实验使用yum方式安装Jenkins LTS长期支持版,版本为 2.462.3。 一、Jenkins基础环境的安装与配置 1.1:基本…...
Bean的生命周期
1.实例化Bean(通过BeanDefinition反射调用无参构造创建对象,如果没有无参构造,需要指定唯一构造方法) 2.给Bean的属性set()赋值 3.检查Bean是否实现了Aware相关接口,实现的话则执行方法 Aware接口:空接口&…...
【缓存与数据库结合方案】伪从技术 vs 直接同步/MQ方案的深度对比
伪从技术 vs 直接同步/MQ方案的深度对比 直接同步修改或通过MQ消息队列也能实现类似同步功能,但伪从技术(通过消费binlog实现数据同步)在某些场景下具有独特优势。下面我将从多个维度进行详细对比分析: 一、核心差异对比表 方案…...
【前端】【业务场景】【面试】在前端开发中,如何实现文件的上传与下载功能,并且处理可能出现的错误情况?
前端文件上传与下载攻略 本文目标:帮你快速掌握文件上传 & 下载的核心实现方式,并在常见出错场景下保持“优雅不崩溃”。 一、文件上传 1. 基础结构 <input type"file" id"fileInput" /> <button id"uploadBtn&…...
【axios取消请求】如何在token过期后取消未响应的请求
功能背景: 我们在实际项目中通常会遇到登录过期后会跳登录页的情况,回跳过程会根据接口请求的状态码判断是否登陆状态过期,并给出用户提示,如果此时存在多个请求接口同时调用,就会同时报出多个登录过期的提示…...
【高频考点精讲】JavaScript中的组合模式:从树形结构到组件嵌套实战
📚 目录 📦 什么是组合模式?🌲 基础版:用组合模式构建一个简单的树形结构💡 举个更真实的场景:菜单组件🧠 为什么组合模式在前端特别重要?🔨 实战案例:组件嵌套组合 + 权限控制🧩 组合模式的延伸用法:搭建 UI DSL 引擎🧪 面试题时间(欢迎评论区作答)组…...
《仙剑奇侠传二》游戏秘籍
无限冥纸:在丰都城,点击特定的小猫,它会给你五张冥纸,再次点击还会再给五张,可循环获取。无限使用虎煞技能:学会 “虎啸风声” 技能后,将虎煞之力值设置为 16,在战斗中持续使用该技能…...
AWS 中国区 CloudFront SSL 证书到期更换实战指南
适用场景: AWS 中国区(宁夏区域 cn-northwest-1 或北京区域 cn-north-1)CloudFront 分配的 SSL 证书到期后无缝替换,域名主体为 domain.cn。 背景与痛点 当 CloudFront 使用的 SSL 证书即将到期时,需手动替换新证书以避免服务中断。由于 AWS 中国区 不支持 ACM 证书,必须…...
【2025A卷】华为OD机试九日集训第3期 - 按算法分类,由易到难,提升编程能力和解题技巧,从而提高机试通过率(Python/JS/C/C++)
目录 一、适合人群二、本期训练时间三、如何参加四、数据结构与算法大纲五、华为OD九日集训第3期第1天、逻辑分析第2天、逻辑分析第3天、双指针第4天、双指针第5天、数据结构map第6天、栈第7天、二叉树第8天、贪心算法第9天、二分查找 六、集训总结国内直接使用最新o3、o4-mini…...
MacOS上如何运行内网穿透详细教程
本文以市面常见、好用的内网穿透为例,一款为开源内网穿透工具Frp;另一款为国产新锐软件ZeroNews。 一、Frp(开源工作、使用自由) 1. 下载 FRP 访问 FRP 的 GitHub 发布页: https://github.com/fatedier/frp/releases 选择适合 …...
第55讲:农业人工智能的跨学科融合与社会影响——构建更加可持续、包容的农业社会
目录 一、农业人工智能的多维融合:科技与社会的桥梁 1. 技术与社会:解决现代农业中的不平等 2. AI与伦理:塑造道德规范与社会责任 3. AI与政策:推动农业政策的科学决策与智能执行 二、AI与农业未来社会的构建:更绿色、更智能、更包容 1. 推动农业可持续发展:绿色农…...
JVM性能优化之老年代参数设置
一、引言 咱们书接上回,上篇文章主要讲解了年轻代参数设置,如果对这一部分还不清楚的建议先去看一下(年轻代参数设置),本文主要为大家介绍老年代参数的设置,掌握好jvm参数的设置是一个高级开发人人员必备的…...
在 Ubuntu 环境为 Elasticsearch 引入 `icu_tokenizer
1. 为什么需要 ICU 分析插件 Elasticsearch 默认的 standard tokenizer 遵循 UAX #29 规则,但在 CJK(中、日、韩)等亚洲语言上仅能按字符切分,无法识别词边界;对包含重音符号、大小写或多脚本混排的文本也缺乏统一归一…...
JMeter 安装及使用 [软件测试工具]
目录 JMeter 1. JMeter 安装 1.1 点击官网下载: JMeter官网下载 1.2 下载后解压即可 1.3 打开 JMeter 1.3.1 方式一: 点击对应程序打开 1.3.2 方式二: 命令行启动 1.4 关闭 JMeter 2. JMeter 基础配置 2.1 修改字体为简体中文 2.2 添加拓展插件 2.2.1 下载其他监听器…...
Unity 资源合理性检测
一:表格过度配置,表格资源是否在工程中存在,并输出不存在的资源 import pandas as pd import glob import osassets [] count 0# 遍历configs文件夹下所有xlsx文件 for file_path in glob.glob(configs/*.xlsx):count 1try:sheets pd.re…...
vue-study(1)
黑马智数项目 黑马智数是一个数字化园区管理项目,该项目后台可以在线管理园区内的楼宇、企业、车辆和一体杆等资源,可视化大屏通过园区3D模型实时展示园区概况。通过该项目能学到如何用qiankun搭建微前端架构、用Echarts进行数据可视化、以及前沿的3D模…...
XS5032:高性能3DNR+HDR ISP-TX 2K芯片
爱芯元智 XS5032:高性能3DNRHDR ISP-TX 2K芯片 视频输入 支持MIPI接口,4lane,Max.1.5Gbps/lane 支持Sensor并口(DVP) 视频分辨率 支持多种同轴高清制式和标清制式,包括: 960H25/30fps&…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]:如何使用NSString类型字符串?
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
TDengine 流计算引擎设计
流计算架构 TDengine 流计算的架构如下图所示。当用户输入用于创建流的 SQL 后,首先,该 SQL 将在客户端进行解析,并生成流计算执行所需的逻辑执行计划及其相关属性信息。其次,客户端将这些信息发送至 mnode。mnode 利用来自数据源…...
扩展中国剩余定理
中国剩余定理 中国剩余定理 考虑一组模线性同余方程: { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a k ( m o d m k ) \begin{cases} x\equiv a_1\pmod{m1} \\ x\equiv a_2\pmod{m2}\\ .\\ .\\ .\\ x\equiv a_k\pmod{mk}\\ \end{cases} ⎩ ⎨ ⎧…...
git检查提交分支和package.json的version版本是否一致
这里写自定义目录标题 一、核心实现步骤1.安装必要依赖2.初始化 Husky3.创建校验脚本4.配置 lint-staged5.更新 Husky 钩子 三、工作流程说明四、注意事项 以下是基于 Git Hooks 的完整解决方案,通过 husky 和自定义脚本实现分支名与版本号一致性校…...
Git 详细使用说明文档(适合小白)
Git 详细使用说明文档(适合小白) 1. 什么是 Git? Git 是一个版本控制系统,帮助你管理和跟踪代码的变更。无论是个人项目还是团队协作,Git 都能帮助你记录代码的历史版本,方便回溯和协作。 2. 安装 Git …...
【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识(2)
文章目录 3.嵌入式系统的存储体系3.1 存储系统的层次结构3.2 内存管理单元(MMU)3.3 RAM和ROM的种类3.3.1 RAM类型对比3.3.2 ROM类型对比 3.4 高速缓存(Cache)3.5 其他存储设备3.5.1 新型存储技术3.5.2 外存接口技术 3.嵌入式系统的…...
rk3588 驱动开发(三)第五章 新字符设备驱动实验
register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用 Linux 内核推荐的新字符设备驱动 API 函数。本节我们就来学习一下如何编写新字符设备驱动,并且在驱动模块加载…...
文件上传--WAF绕过干货
本文主要内容 绕过WAF上传文件 -- 安全狗 -- 宝塔 Burp抓包解析 #上传参数名解析:明确哪些东西能修改? Content-Disposition:—般可更改 name:表单参数值,不能更改 filename:文件名ÿ…...
BERT BERT
BERT ***** 2020年3月11日更新:更小的BERT模型 ***** 这是在《深阅读的学生学得更好:预训练紧凑模型的重要性》(arXiv:1908.08962)中提到的24种较小规模的英文未分词BERT模型的发布。 我们已经证明,标准的BERT架构和…...
Kotlin Multiplatform--02:项目结构进阶
Kotlin Multiplatform--02:项目结构进阶 引言正文 引言 在上一章中,我们对 Kotlin Multiplatform 项目有了基本的了解,已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。 正文 在上一章中&…...
【ES实战】Elasticsearch中模糊匹配类的查询
Elasticsearch中模糊匹配类的查询 文章目录 Elasticsearch中模糊匹配类的查询通配符查询前缀匹配查询正则匹配查询标准的正则操作特殊运算符操作 模糊化查询Fuzziness text类型同时配置keyword类型 Elasticsearch中模糊类查询主要有以下 Wildcard Query:通配符查询P…...
纯真社区IP库离线版发布更新
纯真社区IP库离线版发布更新 发布者:技术分享 2005年,随着中国互联网的蓬勃发展,纯真IP库诞生了。作为全球网络空间地理测绘技术的领先者,纯真开源项目为中国互联网行业提供了高质量的网络空间IP库数据。纯真IP库目前已经覆盖超…...
直接偏好优化(Direct Preference Optimization,DPO):论文与源码解析
简介 虽然大规模无监督语言模型(LMs)学习了广泛的世界知识和一些推理技能,但由于它们是基于完全无监督训练,仍很难控制其行为。 微调无监督LM使其对齐偏好,尽管大规模无监督的语言模型(LMs)能…...