新闻详情

新闻详情

首页 / 资讯中心 / 详情

edasDome实战:Spring Cloud Alibaba微服务从本地到EDAS部署全流程解析

发布时间:2026/9/25 1:17:32来源:尧图网络
edasDome实战:Spring Cloud Alibaba微服务从本地到EDAS部署全流程解析
简介一份面向Java与Spring Boot开发者的阿里EDAS平台学习示例包适合正在入门微服务架构、应用托管与服务治理的初中级工程师。包内以carshop汽车业务场景演示了如何借助EDAS完成服务拆分、部署与治理帮助理解分布式应用的落地方式。资源共15个文件以8个xml配置、6个java源码和1个index页面为主xml负责Maven工程与运行配置java实现核心业务逻辑index提供前端展示入口整体仅16KB结构精简便于快速研读。目前已有141人学习下载。通过对照示例可掌握EDAS服务注册发现、负载均衡、弹性伸缩、限流降级等功能的实际用法同时了解Nacos与CI/CD的集成思路为后续在真实项目中构建高可用分布式应用打下基础。1. 阿里edasDome一份能跑通EDAS全流程的脚手架edasDome这名字看着像个占位工程实际拆下来你会发现它把阿里云EDAS部署链路里最容易出问题的三件事——工程怎么拆、配置怎么分、服务怎么注册——全都给你摆好了。说白了它不是一个能直接上生产的业务系统而是一套“照着改就能用”的Spring Cloud Alibaba双端示例一个Provider负责提供接口一个Consumer负责调用接口中间走Nacos注册与发现。适合三类人被安排“先跑通一个demo再评估迁移成本”的架构师刚接触EDAS想搞明白本地环境和云端环境差在哪的后端开发以及在本地跑得飞起、一上EDAS就翻车的运维。接下来我按实际拆这个资源包的顺序把工程结构、本地复现、EDAS部署和踩坑点全部过一遍。2. 拆解工程结构Provider与Consumer的职责划分拿到edasDome的源码包目录结构不算复杂但很有代表性。它包含两个核心微服务模块edas-provider 和 edas-consumer外加一个公共依赖模块。这种双子工程划分方式是我在EDAS相关项目里最常见到的组织形态——一个服务提供方一个服务消费方正好把服务注册、服务发现、远程调用这条链路完整串起来。2.1 为什么是Provider和ConsumerEDAS中最经典的调用模型在EDASEnterprise Distributed Application Service体系里服务间调用关系是关键。edasDome里的Provider是服务端启动后把自身接口注册到注册中心Consumer是客户端启动后从注册中心拉取Provider的元数据再通过负载均衡发起远程调用。这种模型在阿里内部对应的是HSF框架在开源生态里对应Spring Cloud Alibaba。这个工程最有价值的地方在于它的边界划分Provider只做业务提供不关心谁在调用Consumer只做服务消费不关心Provider部署在几台机器上。你迁移自己的业务到EDAS时需要做的就是把这种边界从示例工程映射到自己的服务上。我一般会先画一张粗略的调用链浏览器或测试工具 → Consumer的HTTP接口 → OpenFeign远程调用 → Provider的REST接口 → 数据库/缓存。edasDome就是这么一条链路只是把数据库层用一个简单的查询逻辑代替了。理解这个链条后续调参数、看日志、排查超时才有方向。2.2 核心依赖版本锁定是Spring Cloud Alibaba工程的第一道关口打开edasDome的pom.xml依赖管理并不花哨但版本搭配是经过验证的组合。工程里锁定的核心组件大概是这么一组我拆包时看到的版本组合以你下载到的实际为准组件作用版本注意点Spring Cloud微服务全套组件基础必须与Spring Boot版本配套Spring Cloud Alibaba提供Nacos、Sentinel集成版本号不对会直接启动失败Nacos Discovery服务注册与发现与注册中心服务端版本匹配OpenFeign声明式HTTP客户端Consumer调用Provider的主要通道LoadBalancer客户端负载均衡替代已停更的Ribbon这段依赖配置相当有参考价值。Spring Cloud Alibaba的版本命名方式和Spring Cloud官方版本号并不是一一对应比如用2021.x还是用2.2.x直接影响Nacos客户端的兼容性。edasDome里选用的版本组合是能同时兼容本地Nacos和EDAS云端环境的这部分我建议你不要轻易动特别是升级Spring Cloud Alibaba版本时要格外慎重。2.3 配置文件拆分bootstrap.yml和application.yml各管一段edasDome在配置上最有教学意义的一点是把配置拆成了两个文件bootstrap.yml管的是启动阶段就要加载的配置比如Nacos地址、命名空间、服务名application.yml管的是业务层面的配置比如端口、数据库连接、日志级别。很多新手会把注册中心地址写到application.yml里结果服务能启动但注册不上——这就是配置文件职责没分清。以Provider的bootstrap.yml为例我拆到的关键配置长这样spring: application: name: edas-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: public config: server-addr: 127.0.0.1:8848 file-extension: yaml这里的server-addr指向本地Nacos地址namespace是命名空间。EDAS环境里的关键差异就在于这两项server-addr要换成EDAS提供的注册中心地址namespace要换成EDAS分配的命名空间ID。这些参数在部署章节细说但你现在至少要知道edasDome在本地能跑通的前提就是bootstrap.yml里的这几行配置是对的。application.yml里面放的则是Provider的业务配置比如server: port: 18081 spring: datasource: url: jdbc:mysql://localhost:3306/edas_demo?useUnicodetruecharacterEncodingutf8 username: root password: root driver-class-name: com.mysql.cj.jdbc.DriverConsumer那边也是同样的拆分逻辑只是端口不同比如18082外加一个OpenFeign的客户端配置。这种双文件配置模式在EDAS上尤其重要因为EDAS的配置中心会替代本地配置文件的部分职责启动阶段加载配置的顺序如果不对服务就起不来。2.4 服务注册与发现从代码看Nacos整合的完整动作Provider端注册服务的代码不复杂核心就是标注Spring Boot应用启动类加上服务实现本质上就是普普通通的Spring Web应用。但注意了EDAS环境会自动注入注册中心相关配置所以Provider端代码里你甚至看不到显式的Nacos注册代码——Nacos Discovery的自动化配置在类路径里就能完成注册动作。Consumer端的关键代码是OpenFeign客户端接口的定义FeignClient(name edas-provider) public interface ProviderClient { GetMapping(/api/demo/hello) String hello(RequestParam(name) String name); }这个接口有几个参数值得注意name的值必须和Provider在Nacos里注册的服务名一致GetMapping的路径必须和Provider端Controller的映射路径一致。这两个一致性问题是实际部署中Consumer调用Provider报404或找不到服务的常见原因。代码逻辑到这里就闭环了Consumer启动时通过EnableFeignClients扫描FeignClient接口启动后从注册中心获取edas-provider的实例列表负载均衡选一个实例发起HTTP调用。整个过程对调用方是透明的你只需要关注服务名、路径、参数这三个维度。这章的最后提一个容易忽视的细节edasDome里还有一个公共模块放的是一些通用工具类和统一返回结构。这个模块在打包时会被两个服务引用所以修改公共模块后需要重新打包整个工程单独打某个服务会出现类找不到的错误。这也是新手经常踩的坑。3. 本地复现Nacos启动到双端联调的全过程拿到edasDome后最直接的价值就是能在本地把它跑起来。我建议按顺序走完环境准备、数据库初始化、Nacos启动、服务启动、接口验证这五个步骤任何一个环节失败都按第5章的排查思路去定位。3.1 环境准备JDK、Maven、MySQL、Nacos四件套edasDome是标准的Java工程环境要求大概是这样JDK 1.8或以上推荐1.8和Spring Cloud Alibaba的兼容性最稳Maven 3.6用于打包和依赖管理MySQL 5.7用于模拟Provider底层的数据存储Nacos Server 2.x作为注册中心和配置中心这些最好一次装到位。Nacos的启动比较特殊它依赖MySQL存储配置如果开启了持久化需要先执行Nacos提供的数据库初始化脚本。如果你用的是Nacos内置Derby存储默认单机模式则可以跳过这一步但生产环境强烈建议切到MySQL存储。启动Nacos的标准命令# Linux/macOS sh startup.sh -m standalone # Windows startup.cmd -m standalone启动完成后访问 http://127.0.0.1:8848/nacos 默认账号密码都是nacos能看到控制台就说明注册中心就绪了。3.2 初始化数据库edasDome自带脚本不可跳过edasDome的源码包或附带文档里会有一个schema.sql之类的文件用来创建示例表和插入初始数据。你得先建一个库再导入这个脚本mysql -u root -p -e CREATE DATABASE IF NOT EXISTS edas_demo DEFAULT CHARACTER SET utf8mb4; mysql -u root -p edas_demo schema.sql这个动作不能省。Provider里有一个简单的查询接口如果表不存在服务虽然能启动但调用时会直接抛数据库异常。导入后可以简单验证一下数据是否存在SELECT * FROM demo_user LIMIT 5;如果返回空结果或者报错先确认数据库字符集和脚本路径别急着启动服务。3.3 启动Provider和Consumer顺序错了就看不到服务启动顺序有讲究先Provider后Consumer。原因很简单Consumer启动时会去注册中心找Provider的实例如果Provider还没注册Consumer虽然也能启动但首次调用会因为没有可用实例而报错。在IDE里直接运行两个启动类最方便。如果你习惯命令行可以分别进到两个模块目录执行mvn spring-boot:run -pl edas-provider mvn spring-boot:run -pl edas-consumer启动Provider后观察日志里这类关键信息Nacos registry, edas-provider 192.168.x.x:18081 register finished看到register finished说明注册成功。然后到Nacos控制台的“服务管理→服务列表”里应该能看到edas-provider这个服务名集群数量为1。Consumer启动后同样到服务列表里确认edas-consumer也注册上了。然后看Consumer日志正常情况下会打印出从Nacos拉取到的Provider实例信息。3.4 联调验证一条curl命令检验全链路双端都启动后验证调用链最简单的方式是直接请求Consumer的接口curl http://127.0.0.1:18082/api/demo/call?nameedas正常返回结果会包含Provider返回的内容比如一段拼接好的字符串。如果这个接口通了说明服务注册、服务发现、Feign远程调用、Provider业务逻辑这整条链路都是通的。这个过程里有一个非常实用的验证方法把Provider停掉再请求Consumer接口正常情况下会报“无法连接”或超时而不是返回缓存数据——这能确认你的调用确实走的是远程调用而非本地直连。恢复Provider后稍等几秒取决于注册中心的心跳周期Consumer又能正常调用了。这一步建议每个跑edasDome的人都做一次能帮你建立起对注册中心“服务下线上线有延迟”这个概念的直观感知。3.5 端口与日志本地复现最容易忽略的两个细节edasDome里Provider默认端口18081Consumer默认端口18082。这两个端口不一定固定你完全可以改成自己的约定端口但要注意改了端口后Nacos控制台显示的实例信息会跟着变Consumer的调用不受影响因为Feign是根据服务名找实例的不依赖端口配置。日志方面建议把日志级别调到DEBUG一次重点看Nacos客户端相关的日志输出。你会发现启动时和心跳续约时都有日志。生产环境建议用INFO级别DEBUG日志量太大。EDAS环境本身会收集应用日志到控制台但本地复现时还是自己盯终端输出更直接。4. 部署到EDAS打包、配置与启动参数的四个关键本地能跑通只是第一步edasDome真正的价值在于它能否被顺利部署到阿里云EDAS上。这个过程和本地启动差异不小主要差异在于注册中心地址、命名空间、配置管理方式和JVM参数。我拆这个资源包时EDAS部署环节也是信息量最大的部分。4.1 打包mvn package跳过测试是标准动作EDAS控制台通常要求上传jar包或镜像进行部署。打包前先确认代码没问题然后执行mvn clean package -DskipTests跳过测试几乎是必须的因为集成测试里如果有依赖外部环境的用例打包时必然失败。打包完成后在edas-provider和edas-consumer的target目录下会各生成一个可执行的jar包。这里注意一个坑公共模块如果有会先被安装到本地仓库所以如果改过公共模块代码执行打包前建议先install一下这个模块mvn clean install -pl edas-common -am -DskipTests不做这一步服务模块打包时可能引用到旧的公共模块版本运行起来你改了代码却不生效。4.2 部署方式选择镜像部署还是JAR包部署edasDome支持两种主流部署方式JAR包直接部署和Docker镜像部署。初次尝试建议用JAR包方式流程短、排错快。在EDAS控制台创建应用时注意选对应用类型为Spring Cloud而不是HSF——虽然EDAS两种都支持但edasDome是基于Spring Cloud Alibaba的选错类型可能导致部分组件不被识别。创建应用时要填写应用名这个应用名和代码里的spring.application.name不是一个概念。代码里的服务名是注册到Nacos用的EDAS应用名是控制台管理用的。两者可以一样也可以不一样对应关系只影响你在控制台里看日志和监控时的辨识度不影响服务间的调用。4.3 关键配置映射本地配置和EDAS环境对照表EDAS部署时最核心的事情就是把本地配置映射到云端环境。我按edasDome的实际配置整理了一张对照表配置项本地值示例EDAS环境值Nacos地址127.0.0.1:8848EDAS提供的注册中心地址环境变量获取命名空间publicEDAS命名空间ID配置中心地址127.0.0.1:8848EDAS配置中心地址数据库地址localhost:3306RDS内网地址日志级别DEBUG/INFOINFO线上噪音更少EDAS环境里注册中心和配置中心地址通常不用硬编码在配置文件里而是通过EDAS控制台在启动时注入环境变量或JVM参数。常见的做法是在bootstrap.yml里使用占位符比如spring: cloud: nacos: discovery: server-addr: ${EDAS_REGISTER_ADDR:127.0.0.1:8848} namespace: ${EDAS_NAMESPACE_ID:public}部署时在EDAS控制台的应用配置里设置EDAS_REGISTER_ADDR和EDAS_NAMESPACE_ID这两个环境变量或者通过-D参数传入。这样同一份打包产物既能本地跑也能部署到EDAS不用改代码重新打包。这是我比较推荐的做法——edasDome里如果配置是写死的建议你改成这种占位符模式。4.4 JVM参数与内存配置微服务在EDAS上存活的第一道保障EDAS容器默认的JVM参数不一定适合你的服务。edasDome里的两个服务都比较轻但如果你把自己的业务接进去内存配置就得认真调。我一般会在EDAS控制台的启动参数里这样设置-Xms256m -Xmx512m -XX:UseG1GC -XX:MaxGCPauseMillis200-Xms和-Xmx是最关键的两个参数。设置太小会频繁Full GC甚至OOM设置太大则浪费EDAS集群资源。对于类似edasDome这种量级的示例服务256m到512m够用如果你的Provider要处理大量数据建议Xmx调到1g以上但这需要结合EDAS实例规格来评估。另外一个容易被忽略的参数是超时时间相关的配置。Consumer调用Provider时如果Provider响应慢Feign默认超时时间可能不够导致调用失败。常见做法是在Consumer的配置文件里加上spring: cloud: openfeign: client: config: default: connect-timeout: 3000 read-timeout: 5000这是全局配置对所有Feign客户端生效。也可以针对单个服务名单独配置语法相同只是把default换成服务名。edasDome里如果没配这个建议你自己加上特别是当Provider逻辑变重之后默认超时很容易触发。4.5 部署后的基础验证日志、服务列表、调用链EDAS部署完成且实例状态变更为Running后只代表进程起来了不代表链路通了。我的验证顺序是固定的首先看EDAS控制台的应用日志确认Nacos注册成功的log出现。然后去EDAS的“服务查询”或“服务鉴权”页面搜索edas-provider这个服务名看是否存在且健康实例数为1。最后再发起一次远程调用方式可以是本地curl EDAS应用的公网SLB地址也可以直接在Consumer的EDAS实例上执行。这里有个经验之谈EDAS上看到“部署成功”不代表一切正常必须等到服务列表里能看到服务名才算真正接入集群。服务注册有延迟通常几秒到十几秒别一看到实例状态Running就开始排查问题先等十秒左右再去看服务列表。5. 避坑记录注册失败、配置失效与内存溢出的常见根因edasDome从本地跑到EDAS这一段路是坑最密集的地方。我整理了几条高频踩坑记录每条都是现象、原因、解决三个层次你在复现过程中遇到问题可以直接按这个清单定位。5.1 Provider启动成功但Nacos控制台看不到服务现象本地Provider日志显示启动完成端口也在监听但Nacos控制台服务列表为空。原因最常见的是bootstrap.yml没有被加载。Spring Cloud Alibaba里Nacos的注册配置需要放在bootstrap.yml或bootstrap.properties中因为这部分配置在Spring Cloud上下文初始化阶段就要读取。如果你把spring.cloud.nacos.discovery配置写到了application.yml里服务启动时注册动作可能没生效或者注册的地址不对。第二种常见原因是命名空间不对——本地启动默认是public但你如果显式配置了别的namespace控制台得切到对应的命名空间才能看到。解决先把配置挪到bootstrap.yml确认namespace是public或和Nacos控制台当前选中的命名空间一致。然后在日志里搜索Nacos registry关键字看注册时用的IP和端口是否正常。如果注册IP是127.0.0.1或内网IP但客户端无法访问可能需要给Nacos客户端指定网卡或IP。5.2 Consumer报No instances available现象Consumer启动正常但调用Provider接口时抛异常提示找不到可用实例。原因大概率是服务名匹配问题。FeignClient注解里的name和Provider的spring.application.name不一致。比如Provider注册名是edas-providerFeign注解里写成了provider就匹配不到。另一个原因是Provider和Consumer不在同一个命名空间Nacos按namespace做隔离跨namespace默认发现不了。解决先到Nacos控制台确认Provider的实际服务名和Consumer的Feign注解name完全一致再确认两个服务的namespace配置一致。如果配置都没问题检查Provider实例的健康状态——如果Provider启动成功但状态是DOWN问题多半在Provider自身的健康检查上比如数据库连接失败导致实例被标记为不健康。5.3 部署到EDAS后配置修改不生效现象在EDAS控制台上改了配置重启应用后代码还是用的旧配置。原因EDAS的配置管理优先级比本地文件高但前提是你的应用正确接入了EDAS配置中心。本地bootstrap.yml里如果有spring.cloud.nacos.config相关配置且server-addr指向了EDAS之外的地址应用可能仍然在连本地的Nacos配置中心而不是EDAS自带的配置管理。另一个常见原因是配置文件的dataId或group不对EDAS配置中心按dataId、group、namespace定位配置任何一个不匹配都会导致配置拉取失败。解决部署到EDAS时把bootstrap.yml里nacos.config相关的地址改为通过环境变量或占位符注入确认地址指向EDAS配置中心。在EDAS控制台配置管理里创建一个和bootstrap.yml里file-extension对应的dataId比如edas-provider.yamlgroup建议保持DEFAULT_GROUP。修改配置后EDAS通常支持动态刷新但如果涉及数据源这类需要重建连接的配置还是建议重启应用。5.4 内存溢出导致实例反复重启现象EDAS实例启动后运行一段时间内存持续上涨日志出现OutOfMemoryError然后被EDAS判定为不健康并重启。原因一是JVM参数设得太小edasDome本身虽然轻但如果你加了业务逻辑默认配置可能不够二是代码里存在内存泄漏不过示例工程里基本不会有三是EDAS实例规格和JVM参数不匹配比如实例只有512MB内存JVM堆却给了512m加上元空间和线程栈就爆了。解决先用EDAS控制台看实例的实际内存规格然后按“堆内存不超过容器内存的60%”这个原则设置-Xmx。给-XX:MaxMetaspaceSize设置一个上限比如256m防止元空间膨胀。最后观察几天内的内存曲线如果持续上升且GC无法回收优先怀疑代码里的集合类缓存或线程池问题而不是继续调大JVM参数。调大内存只是延缓症状不是治本。5.5 本地正常但EDAS环境调用超时现象本地联调一切正常部署到EDAS后Consumer调用Provider偶尔成功、偶尔超时慢的时候要几秒。原因EDAS环境里网络链路比本地长Provider和Consumer可能分布在不同可用区中间还有SLB、安全组等环节。如果把Feign超时时间设置得过短比如小于1秒网络抖动时就会触发超时重试。另一个原因是Provider首次调用时需要加载初始化数据或建立数据库连接池第一次请求特别慢后续就正常了——这是典型的冷启动问题。解决Feign超时时间放宽到3到5秒connect-timeout和read-timeout分开设置。Provider端如果业务较重在EDAS里开启服务预热通常通过流量调度实现让新启动实例的流量逐步增加。如果你是Java服务还可以在启动阶段预加载关键缓存和数据库连接避免第一个请求来的时候现场初始化。这类问题排查时可以配合EDAS的链路追踪功能看耗时集中在哪一个环节而不是盲目调超时。6. 压测与验证从接口连通到预热调优的实测路径edasDome跑到EDAS上之后不要停在“能调通”就收工。我一般会多做一步压测验证把链路的真实承受能力摸清楚。工具选Apache JMeter或阿里云PTS都行重点是理解几个关键指标的变化规律。先做一个十分钟的基准压测请求Consumer接口并发从10逐步升到50、100记录响应时间P99和错误率。edasDome这种轻量级服务50并发下P99应该在几百毫秒以内如果超过一秒优先怀疑Provider侧数据库连接池或服务端线程池配置。这里有个常被忽略的地方压测时如果Consumer和Provider都部署在EDAS同一个集群网络延迟很低瓶颈通常不在网络而在代码逻辑或资源规格。然后做一次服务重启压测在压测进行中手动重启Provider的一个实例观察Consumer端是否出现错误或超时。这是检验注册中心上下线机制的最直接方法。正常表现是Provider实例下线后Consumer会有短暂几秒的错误或超时取决于健康检查间隔和负载均衡策略然后恢复。如果错误持续很长时间说明服务发现延迟太大或重试机制没配好。出现这种情况我给的建议是给Feign开启重试注意幂等性以及调整Nacos客户端的健康检查相关参数。最后是预热验证把Provider的JVM参数调成-XX:UseG1GC并配置好GC日志参数做一个30分钟的长时间压测观察Full GC频率。完整有效的GC日志参数我建议这么写-Xms256m -Xmx512m -XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:/home/admin/logs/gc.log长时间压测后的数据收集要做全Consumer侧的错误率、Provider侧的GC日志、数据库连接池的活跃连接数、Nacos控制台的服务健康状态。如果你想把edasDome接入自己的监控体系可以配置好Spring Boot Actuator暴露健康端点再用Prometheus或EDAS自带监控体系拉取指标。压测做完之后我看到过不少团队在EDAS上上线前的最后一步是查看这些指标里的异常值比如GC前后对比、服务注册次数、实例上下线事件。从那以后我每次把edasDome这类Spring Cloud Alibaba工程部署到新环境都强制走一遍这套流程——先验证注册再验证调用链最后做一次带重启的压测确认服务发现和重试机制都在正常工作。这几个环节的坑踩过一遍之后后面接自己的业务系统就顺多了。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

HTML5多图片上传预览核心实现与内存优化:从FileReader到ObjectURL 2026/9/25 1:59:47

HTML5多图片上传预览核心实现与内存优化:从FileReader到ObjectURL

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
双相交错PFC设计实战:UCC28070与HP1013选型对比及调试技巧 2026/9/25 1:59:47

双相交错PFC设计实战:UCC28070与HP1013选型对比及调试技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
开源项目低成本实用指南:从开发者工具到AI应用的选型与避坑 2026/9/25 1:59:47

开源项目低成本实用指南:从开发者工具到AI应用的选型与避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
TradingView.zip离线部署指南:图表库+Pine Script策略改造与避坑 2026/9/25 1:59:47

TradingView.zip离线部署指南:图表库+Pine Script策略改造与避坑

简介:TradingView.zip是一份以TradingView前端资源为主的完整代码包,适合希望搭建本地图表分析环境、研究其技术架构或进行二次开发的交易爱好者和开发者。压缩包共676个文件,约5.71MB,其中包含324个JavaScript、248个CSS、31个HT…

阅读更多 →
宇树机器狗unitree_sdk2_python开发环境配置与CycloneDDS避坑指南 2026/9/25 1:59:47

宇树机器狗unitree_sdk2_python开发环境配置与CycloneDDS避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
WASM在ESP32上无法直接操作硬件的三大根本原因 2026/9/25 1:59:40

WASM在ESP32上无法直接操作硬件的三大根本原因

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞