基于Kettle开发的web版数据集成开源工具(data-integration)-部署篇

目录

  • 📚第一章 前言
    • 📗背景
    • 📗目的
    • 📗总体方向
  • 📚第二章 下载编译
    • 📗下载
    • 📗编译
  • 📚第三章 部署
    • 📗准备工作
      • 📕 安装数据库&redis&consul
      • 📕 修改配置文件的数据库、redis、consul信息
        • 📘 `/dataintegration-gateway/src/main/resources/application-local.yaml`修改用户认证服务SSO
    • 📗服务器-应用目录结构
    • 📗重新编译并上传jar包
    • 📗启动后台服务
      • 📕consul监控页面可以看到启动成功的服务
    • 📗前端部署
      • 📕编译
      • 📕nginx配置
      • 📕登录验证
  • ⁉️问题记录
    • ❓问题一:-cp方式启动报错:找不到类
      • ❗解决方式:直接jar包启动
    • ❓问题二:Failed to handle request....10200/api/dataintegration-common-sso-provider/oauth/token
      • ❕原因:hosts文件被注释掉了
      • ❗解决方式:取消注释,重启gateway服务
    • ❓问题三:新建集成操作报错
      • ❕原因:运行模块没启动成功导致的
      • ❗解决方式:正确应该启动的是`dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar`

📚第一章 前言

📗背景

在前面的ETL专栏中有提到,最近一直在寻找基于Kettle开发的web版开源工具,后面都放弃准备研究kettle源码了,结果遇到了一款,今天先来研究下Linux环境手动部署(官方给的都是docker方式部署,需要搭建docker、mvn、node、npm等环境,太复杂了!)
在这里插入图片描述

📗目的

本身公司有数据中台产品,只是需要Kettle任务绘制这一块内容

📗总体方向

参考该开源产品核心代码

📚第二章 下载编译

📗下载

下载地址:https://github.com/young-datafan-ooooo1/data-integration

📗编译

导入开发工具进行编译:

mvn clean install -Prelease  -Dcheckstyle.skip=true -Dmaven.test.skip=true -Dmaven.javadoc.skip=true

在这里插入图片描述
在这里插入图片描述

📚第三章 部署

📗准备工作

📕 安装数据库&redis&consul

  • 数据源:使用MySQL数据库,没有的自行安装(docker安装mysql-建议本地手动安装mysql,这是之前安装docker练手用的,需要可以参考),博主使用的是8.0版本,建库语句如下供参考
    CREATE DATABASE `dataintegration_db`;
    create user 'stelladp'@'%' identified by 'Renxiaozhao@2023';
    grant create,alter,drop,select,insert,update,delete,INDEX,REFERENCES on dataintegration_db.* to stelladp@'%';
    flush privileges; 
    
    在这里插入图片描述
  • 安装redis,可参照redis安装使用及告警处理
    在这里插入图片描述
  • 安装consul,参照Linux安装consul的两种方式(在线和离线)
    在这里插入图片描述

📕 修改配置文件的数据库、redis、consul信息

修改所有模块application-local.yamlbootstrap.yaml文件,涉及数据库、redis、consul的地方全都改掉
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

📘 /dataintegration-gateway/src/main/resources/application-local.yaml修改用户认证服务SSO

在这里插入图片描述

id: dataintegration-common-sso-provider
#uri: lb://dataintegration-common-sso-provider
uri: http://localhost:10217/oauth/

📗服务器-应用目录结构

├─data-integration
│  └─bin     --存放启停脚本
│  └─conf    --存放配置文件(暂未用到,直接使用的jar包中的脚本)
│  └─lib     --jar包文件
│  └─logs    --日志目录
│  └─ui      --前端部署文件

📗重新编译并上传jar包

修改完配置,重新编译项目,找到所有模块的target目录下的jar包(有兴趣的可以尝试修改pom.xml文件,统一打包到某一路径下),上传到服务器
在这里插入图片描述
在这里插入图片描述
订正:只需要provider目录下面的jar包和gateway的jar包
在这里插入图片描述
在这里插入图片描述

-rw-rw-r--. 1 opensource opensource  93704942 12 18:06 dataintegration-file-management-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  66606827 12 18:04 dataintegration-gateway-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  55597256 12 18:04 dataintegration-group-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource 161231342 12 18:05 dataintegration-model-management-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  55634210 12 18:03 dataintegration-project-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource 179893827 12 18:04 dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-biz.jar
-rw-rw-r--. 1 opensource opensource  71467663 12 18:05 dataintegration-sso-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  63207137 12 18:05 dataintegration-sys-management-provider-1.0.0-SNAPSHOT.jar

📗启动后台服务

启动脚本如下:

#! /bin/bash
APP_LIB=/home/opensource/app/data-integration/lib
APP_LOGS=/home/opensource/app/data-integration/logsecho "启动系统管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-sys-management-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/sys.log 2>&1 &echo "启动分组管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-group-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/group.log 2>&1 &echo "启动服务网关模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-gateway-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/gateway.log 2>&1 &echo "启动脚本管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-project-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/project.log 2>&1 &echo "启动单点登录模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-sso-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/sso.log 2>&1 &echo "启动模型管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-model-management-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/model.log 2>&1 &echo "启动文件管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-file-management-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/file.log 2>&1 &echo "启动数据集成运行模块..................."
#exec nohup java -jar ${APP_LIB}/dataintegration-run-management-provider-1.0.0-SNAPSHOT.jar  > ${APP_LOGS}/run.log 2>&1 &
#exec nohup java -jar ${APP_LIB}/dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-biz.jar  > ${APP_LOGS}/run.log 2>&1 &
exec nohup java -jar ${APP_LIB}/dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar  > ${APP_LOGS}/run.log 2>&1 &

其中文件模块和运行模块启动失败,不知道有没有影响,先跳过不管,最后会统一放到问题记录章节处理
在这里插入图片描述
订正file服务需要hdfs等存储环境,启动失败只会影响涉及文件的任务无法使用,run服务启动失败,会导致页面报错,很多查询接口都会报错,按照上面的脚本启动应该没有问题,一开始启动失败是因为选错了jar
在这里插入图片描述

📕consul监控页面可以看到启动成功的服务

在这里插入图片描述
file服务忽略,正常应该有7个服务
在这里插入图片描述

📗前端部署

可参照smartKettle离线部署及问题记录中的前端部署章节,需要一些基础环境,这里不在赘述

📕编译

  • 博主使用的VSCode工具,导入前端项目,首先npm install
    在这里插入图片描述
  • 编译打包npm run build
    在这里插入图片描述
    在这里插入图片描述
  • dist目录对应就是部署文件
    在这里插入图片描述
  • 上传到服务器
    在这里插入图片描述

📕nginx配置

同样参照参照smartKettle离线部署及问题记录中的nginx配置章节,需要安装nginx,这里不在赘述

server {listen       8785;server_name  localhost;location / {root /home/opensource/app/data-integration/ui/dist;try_files $uri $uri/ /index.html;index  index.html index.htm;}location /cloud {alias /home/opensource/app/data-integration/ui/dist;index  index.html index.htm;try_files $uri $uri/ /cloud/index.html;     #4.重定向,内部文件的指向}location /api {proxy_pass http://localhost:10200/api/;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}

📕登录验证

用户密码admin/Prime@2020,登录失败😭
在这里插入图片描述
错误原因参考下面的问题二,修复后可以正常登录
在这里插入图片描述
run服务启动成功后,也面正常展示
在这里插入图片描述

⁉️问题记录

❓问题一:-cp方式启动报错:找不到类

在这里插入图片描述

❗解决方式:直接jar包启动

在这里插入图片描述

❓问题二:Failed to handle request…10200/api/dataintegration-common-sso-provider/oauth/token

在这里插入图片描述

2024-01-02 16:37:16.466 [traceCode:] [reactor-http-epoll-8] ERROR c.y.g.c.g.GatewayJsonExceptionHandler - Failed to handle request ....10200/api/dataintegration-common-sso-provider/oauth/token]: Search domain query failed. Original hostname: 'localhost' failed to resolve 'localhost.localdomain' after 2 queries 
io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Search domain query failed. Original hostname: 'localhost' failed to resolve 'localhost.localdomain' after 2 queries at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013)Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):|_ checkpoint ⇢ springfox.boot.starter.autoconfigure.SwaggerUiWebFluxConfiguration$CustomWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.web.cors.reactive.CorsWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$OAuth2ResourceServerSpec$BearerTokenAuthenticationWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]|_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]|_ checkpoint ⇢ HTTP POST "/api/dataintegration-common-sso-provider/oauth/token" [ExceptionHandlingWebHandler]
Stack trace:at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013)at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:966)at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:414)at io.netty.resolver.dns.DnsResolveContext.access$600(DnsResolveContext.java:63)at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:463)at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571)at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550)at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:609)at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:117)at io.netty.resolver.dns.DnsQueryContext.tryFailure(DnsQueryContext.java:225)at io.netty.resolver.dns.DnsQueryContext$4.run(DnsQueryContext.java:177)at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170)at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:750)
Caused by: io.netty.resolver.dns.DnsNameResolverTimeoutException: [/114.114.114.114:53] query via UDP timed out after 5000 milliseconds (no stack trace available)
2024-01-02 16:38:14.771 [traceCode:] [scheduling-1] INFO  c.y.g.r.GatewayRateLimitSyncTask - start syncRateLimit ,规则记录数:0 ,耗时:33
2024-01-02 16:38:15.635 [traceCode:] [scheduling-1] INFO  c.y.g.route.GatewayRouteSyncTask - sta

❕原因:hosts文件被注释掉了

在这里插入图片描述

❗解决方式:取消注释,重启gateway服务

放开注释:
在这里插入图片描述
不要忘了重启gateway服务:

exec nohup java -jar /home/opensource/app/data-integration/lib/dataintegration-gateway-1.0.0-SNAPSHOT.jar > /home/opensource/app/data-integration/logs/gateway.log 2>&1 &

在这里插入图片描述

❓问题三:新建集成操作报错

在这里插入图片描述
在这里插入图片描述

❕原因:运行模块没启动成功导致的

查看gateway日志, dataintegration-di-run-management-provider没启动成功导致
在这里插入图片描述

  • dataintegration-run-management-provider-1.0.0-SNAPSHOT.jar 中没有主清单属性
    [opensource@bigdata02 logs]$ less run.log 
    nohup: 忽略输入
    /home/opensource/app/data-integration/lib/dataintegration-run-management-provider-1.0.0-SNAPSHOT.jar中没有主清单属性
    
    • 错误解释:缺少Main-Class属性
      在这里插入图片描述
  • 解决方式:启动dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar
    在这里插入图片描述
    dataintegration-run-management-provider下面有三个jar包,真正配置DiRunManagementApplication的是dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-biz.jar结果走了弯路,实际应该启动的是dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar
    在这里插入图片描述
    弯路从这开始…(又没选对启动jar包
    在这里插入图片描述
    在这里插入图片描述

❗解决方式:正确应该启动的是dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar

正确应该是启动dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar
在这里插入图片描述
启动成功后,页面正常
在这里插入图片描述

❓问题五:DiRunManagementApplication启动报错·Exception in thread “main” java.lang.NoClassDefFoundError: org/springframework/boot/builder/SpringApplicationBuilder

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/builder/SpringApplicationBuilderat com.youngdatafan.di.run.management.DiRunManagementApplication.main(DiRunManagementApplication.java:29)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.builder.SpringApplicationBuilderat java.net.URLClassLoader.findClass(URLClassLoader.java:387)at java.lang.ClassLoader.loadClass(ClassLoader.java:418)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鼠标驱动框架:模拟键盘按键

/* 参考: drivers\hid\usbhid\usbmouse.c */ #include <linux/kernel.h> #include <linux/slab.h> #include <linux/module.h> #include <linux/init.h> #include <linux/usb.h> #include <linux/input.h> #include <linux/hid.h>st…

计算机毕业设计-------基于JSP+Servlet的毕业生离校管理系统

需求分析 使用JSPServletMysql技术设计一个毕业生离校管理系统, 整个系统采用BS架构, 为高校方便进行毕业生离校流程进行统一的离校流程, 极大的减少了大量学生同时离校的过程中杂乱的情况, 整个系统分为学生, 教务处, 辅导员, 图书馆, 宿管, 财务处, 系办公室, 管理员登等角色…

Vue.observable你有了解过吗?

一、Observable 是什么 Observable 翻译过来我们可以理解成可观察的 我们先来看一下其在Vue中的定义 Vue.observable&#xff0c;让一个对象变成响应式数据。Vue 内部会用它来处理 data 函数返回的对象 返回的对象可以直接用于渲染函数和计算属性内&#xff0c;并且会在发生变…

【华为机试】2023年真题B卷(python)-考古问题

一、题目 题目描述&#xff1a; 考古问题&#xff0c;假设以前的石碑被打碎成了很多块&#xff0c;每块上面都有一个或若干个字符&#xff0c;请你写个程序来把之前石碑上文字可能的组合全部写出来&#xff0c;按升序进行排列。 二、输入输出 三、示例 示例1: 输入输出示例仅供…

了解Apache 配置与应用

本章内容 理解 Apache 连接保持 掌握 Apache 的访问控制 掌握 Apache 日志管理的方法 Apache HTTP Server 之所以受到众多企业的青睐&#xff0c;得益于其代码开源、跨平台、功能 模块化、可灵活定制等诸多优点&#xff0c;不仅性能稳定&#xff0c;在安全性方面的表现也十分…

【设计模式-2】原型模式的原理、代码实现及类图展示

我们一定对类的实例化比较熟悉&#xff0c;前面我们说的单例、还有3种工厂模式都是通过new关键字来创建对象&#xff0c;下面我们来了解一种新的对象创建的方式。 1. 定义 原型模式也是一种创建型的设计模式&#xff0c;实现和原理总体比较简单&#xff0c;一句话总结呢&#…

Weblogic安全漫谈(二)

前言 继本系列上篇从CVE-2015-4852入手了解T3协议的构造后&#xff0c;本篇继续分析开启T3反序列化魔盒后的修复与绕过。 Weblogic对于10.3.6推出了p20780171和p22248372用于修复CVE-2015-4852&#xff0c;在补丁详情中又提示了p21984589是它的超集&#xff0c;所以可以直接装…

kubeadm

kubeadm快速搭建一个k8s小集群 二进制搭建适合搭建大集群&#xff08;50台以上主机&#xff09; kubeadm更适合中小企业的业务集群 master 120.168.233.70 dockerkubelet kubeadm kubectl flannel node01 120.168.233.80 dockerkubelet kubeadm kubectl flannel node02 …

通过软盘拷贝文件 - 华为OD统一考试

OD统一考试(B卷) 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 有一名科学家想要从一台古董电脑中拷贝文件到自己的电脑中加以研究但此电脑除了有一个3.5寸软盘驱动器以外&#xff0c;没有任何手段可以将文件持贝出来&#xff0c;而且只有一张软盘可以…

MySQL将多条数据合并成一条的完整示例

数据库中存的是多条数据&#xff0c;展示的时候需要合并成一条 数据表存储形式如下图 以type分组&#xff0c;type相同的算一条&#xff0c;且保留image和link的所有数据&#xff0c;用groupBy只保留一条数据 解决方案&#xff1a;用GROUP_CONCAT 完整语法如下 group_concat…

Python是怎么调用接口的

在Python中调用接口可以使用多种方式&#xff0c;以下是其中几种常用的方法&#xff1a; 使用标准库中的urllib模块或第三方库requests发送HTTP请求。首先需要导入对应的库&#xff0c;然后使用相应的函数发送请求&#xff0c;并获得返回的结果。 例如&#xff0c;在使用requ…

从有向带权图判断最短路径里各目标顶点顺序

对如下有向带权图&#xff0c;若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径&#xff0c;则得到的第一路径的目标顶点是b&#xff0c;第二条最短路径的目标顶点是c&#xff0c;后续得到的其余各最短路径的目标顶点依次是() A.d,e,f B.e,d,f C.f,d,e D.f,…

linux-6.0 内核存储栈全景图

linux 存储栈原图地址&#xff1a;https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram

自动驾驶TPM技术杂谈 ———— ODDODC

文章目录 介绍研究现状主流相关定义国标定义SAE定义WP29定义 ODD主流构建框架NHTSA ODD构建框架SAE AVSC ODD构建框架PEGASUS 6层模型BSI ODD构建框架 设计运行条件的原则ODC 的设计原则ODC 元素的制定原则ODC 的使用原则 设计运行条件元素ODD 元素驾乘人员状态4车辆状态 ODC 描…

3分钟Alibaba Cloud Linux镜像操作系统详解

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版&#xff0c;针对阿里云服务器ECS做了大量深度优化&#xff0c;Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS&#xff0c;Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

大学生如何当一个程序员——第二篇:就业实战2

第二篇&#xff1a;就业实战2 第二篇&#xff1a;就业实战21.职场的十大基本素质2.公司调研3.项目调研4.基础技术准备5.热门技术准备6.更高端技术准备7.本专业之外的技术准备8.共同话题准备 文章出自https://www.bjsxt.com/xiulian.html#1F 各位小伙伴想要博客相关资料的话关注…

深入了解隧道代理HTTP的协议与技术细节

隧道代理HTTP&#xff0c;作为一种网络通信的桥梁技术&#xff0c;其背后的协议与技术细节承载着网络世界的无尽奥秘。对于技术人员而言&#xff0c;深入了解这些细节&#xff0c;不仅有助于优化网络性能&#xff0c;还能为网络安全提供坚实的保障。 一、隧道代理HTTP的协议基…

2024阿里云服务器租赁优惠价格表_ECS和轻量应用服务器配置报价

阿里云服务器租用价格表大全&#xff0c;云服务器一年费用、一个月价格以及1小时收费明细&#xff0c;阿里云2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月&#xff0c;ECS云服务器e系列2核2G配置99元一年、2核4G服务器30元3个月、2核4G配置365元一年、…

二维码、条形码识别

一. 场景介绍 二维码和条形码包含很多信息&#xff0c;对二维码和条形码识别对信息抽取具有重要意义。下面介绍两种二维码识别的方法&#xff0c;并用python实现。 二. 代码实现 import os import cv2 from cv2.wechat_qrcode import WeChatQRCode from pyzbar import pyzba…

v-if导致el-button的disabled属性动态修改失败,加key解决(虚拟列表+el-checkbox出现勾选/未勾选的闪现问题同理解决)

<template v-if"isPrev"><el-button type"primary"size"small" click"nextHandle">下一步&#xff1a;添加设备</el-button> </template> <template v-else><el-button type"primary" siz…