RabbitMQ + SpringBoot:第一个Hello World的极简集成与避坑指南
做后端这些年我见过不少项目卡在“第一次接入消息队列”这一步。明明整个团队都听过 RabbitMQ也知道它解耦、削峰那套理论可真到要写第一个 Hello World 的时候不是连不上就是消息发了没人消费最后往往靠复制粘贴别人的代码糊过去。这次我把 RabbitMQ 的第一个 Hello World 用 SpringBoot 重新走了一遍从环境准备到代码落地把整个极简集成过程的每一个细节、每一个坑都记录下来。文章面向第一次接触 RabbitMQ 的开发者也适合那些用过 RabbitMQ 但一直没系统梳理过 SpringBoot 集成细节的朋友。1. 为什么第一个程序要选 RabbitMQ SpringBoot从一次业务场景说起1.1 没有消息队列时系统是怎么卡住的先讲一个实际场景。某次我给一个内部运营系统加功能用户提交一个表单后后端要干三件事入库、发通知、同步到另一个统计服务。最开始通过普通 HTTP 调用三个步骤串在一起一个接口完整走完要一两秒。这个延迟在测试环境完全看不出来上线后用户一多数据库连接池先被打满紧接着下游统计服务处理不过来整个表单提交接口动不动就超时。问题不在于单次调用有多慢而在于这三个动作的“时效性要求”完全不一样。入库必须立刻完成通知可以等几秒统计数据晚几分钟也没关系。把不同时效要求的事情硬绑在同一个请求链路里本质上是让最慢的那个环节拖垮整个链路。消息队列的意义就在这里把“必须立刻做的事”和“可以稍后做的事”拆开让请求先返回其他事情异步慢慢做。我选 RabbitMQ 而不是另外几个竞品的原因很朴素它足够成熟社区资料多踩坑经验到处都是而且 SpringBoot 官方对 AMQP 协议的支持非常完善。用它的第一个 Hello World 来验证“消息能不能发、能不能收”是最快建立信心的方式。1.2 RabbitMQ 在消息链路里到底扮演什么角色很多人第一次看 RabbitMQ 的文档会被一堆概念吓到Connection、Channel、Queue、Exchange、Binding、RoutingKey。其实把它类比成“邮局系统”就很好理解。生产者的角色是“寄件人”它把信放进邮局RabbitMQ 服务器不需要知道收件人是谁也不用关心收件人此刻在不在家。交换机Exchange是“分拣台”它根据信封上的地址RoutingKey决定把信投递到哪个邮筒队列。消费者是“收件人”它只需要在指定邮箱旁边等着邮件一到就取走。第一个 Hello World 里我会刻意绕过 Exchange直接用默认交换机。这样做的好处是让你先抓住最核心的一条链路生产者 → 队列 → 消费者。等这条链路跑通了再回头理解交换机怎么把消息分流复杂度就降低了很多。1.3 SpringBoot 集成 RabbitMQ 的优势在哪里SpringBoot 对 RabbitMQ 的封装主要体现在spring-boot-starter-amqp这个依赖里。它替我们做了几件很关键的事自动创建 ConnectionFactory、准备 RabbitTemplate 供发送消息、扫描 RabbitListener 注解并注册监听器容器。换句话说你不需要像原生 Java 客户端那样手动管理连接和 Channel这些细节全部被框架兜住了。但“被框架兜住”不等于“不用理解”。事实上SpringBoot 默认的自动配置在很多情况下只能满足“能跑”的需求真到内存水位调优、消费者并发控制、消息确认机制这些层面还是要手动覆写配置。极简 Hello World 的意义就是先建立一条能跑通的最小闭环在这个闭环上去观察框架替我们做了什么然后逐步拆开看内部机制。2. 环境准备里最容易被忽略的两件事版本匹配与初始账号2.1 本地环境搭建的两种路径我建议直接走 DockerRabbitMQ 本身是 Erlang 写的对 Erlang 版本有兼容要求。如果选择在本机安装第一件容易踩坑的事就是 Erlang 版本和 RabbitMQ 版本不匹配安装完发现服务起不来日志报一堆奇怪的错误。我见过某位同事在 macOS 上折腾了一下午最后发现是 Homebrew 默认装的 Erlang 版本太新RabbitMQ 3.8 系列根本不认账。如果你手边有 Docker 环境我强烈建议不要自己安装直接拉官方镜像。一条命令就能得到一个带管理插件的完整环境docker run -d --name rabbitmq \ -p 5672:5672 -p 15672:15672 \ -e RABBITMQ_DEFAULT_USERdev \ -e RABBITMQ_DEFAULT_PASSdev123 \ rabbitmq:3-management这里的端口要解释一下5672是 AMQP 协议端口生产者和消费者连接 RabbitMQ 走的就是它15672是管理控制台端口浏览器打开之后可以看队列状态、连接信息、消息速率。两个端口漏掉任何一个后面排查起来都会很困惑。E_RABBITMQ_DEFAULT_USER和E_RABBITMQ_DEFAULT_PASS是官网镜像提供的初始化环境变量会自动创建好一个名为dev的用户并赋予默认虚拟主机/的权限。这里有个细节如果没有指定这两个环境变量默认用户就是guest/guest但 guest 账号默认只能在 localhost 下访问从远程连会被拒。2.2 管理控制台里必须做的一次检查容器启动后打开http://localhost:15672用dev/dev123登录。进去之后先看右上角的“Nodes”标签确认节点状态是running再看一下 Memory 和 Disk 指标有没有异常。这两项很重要因为 RabbitMQ 有内存和磁盘水位保护机制如果超过阈值它会自动阻塞生产者表现就是“消息发出去但没反应”。如果你决定不用 Docker而是自己安装那么装完后一定要执行rabbitmq-plugins enable rabbitmq_management才能开启管理控制台。这个插件在默认安装包里是不开启的很多人装完半天发现没有控制台就是从这一步漏掉了。2.3 为什么我建议你显式创建一个独立虚拟主机虚拟主机vhost是 RabbitMQ 里做隔离的最小单位。默认的/直接能用但如果你后面有多个项目共用同一个 RabbitMQ 服务器互相之间的队列如果都写在/下面就可能出现生产者把消息发到同名校验队列的意外。所以我建议在最开始就建一个独立的 vhost进入管理控制台点击 “Admin” → “Virtual Hosts”新增一个名为demo_vhost的虚拟主机然后在 “Users” 里把dev用户配置对该虚拟主机的权限。这一步虽然会让第一个 Hello World 多一点操作成本但对后续多环境隔离非常有帮助。后面你在配置文件里指定的虚拟主机名必须和这里创建的完全一致否则会抛出NOT_ALLOWED - access to vhost refused的异常这是和本机连接失败完全不同的错误。3. 第一个 Hello World 的核心链路与最小代码结构3.1 极简通信链路的四个组成部分写代码之前先在脑子里把链路固化成四个部分应用连接、发送器、队列容器、接收器。应用的连接由 SpringBoot 自动配置管理你只需要在application.yml里给出地址和账号。发送器是RabbitTemplateSpringBoot 已经初始化好了这个 Bean直接注入就能用。队列容器负责把需要监听的消息队列声明出来Spring 会通过Queue这个类来描述队列并在连接建立后自动声明到 RabbitMQ 服务器。接收器则是用RabbitListener注解标记的业务方法一旦有消息到达指定队列这个方法就会被调用。这四部分对应到代码就是一个启动类、一个配置类、一个发送服务、一个监听器。不需要额外写很多代码但每部分的职责要清晰。3.2 pom 依赖与配置文件在 SpringBoot 工程里引入 RabbitMQ 支持只需要一个依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency如果没有继承 SpringBoot 的父 POM需要带上版本号。这个依赖会自动引入amqp-client和 Spring 的 rabbit 支持模块不需要再手动加别的包。application.yml里配置如下spring: rabbitmq: host: 127.0.0.1 port: 5672 username: dev password: dev123 virtual-host: demo_vhost这个配置文件的每一行都应该能和你前面的环境对应上。尤其是virtual-host它必须与你在管理控制台创建的名称完全一致。端口不是15672是5672我见过有人把控制台端口填进来结果连接一直超时原因就是这个。3.3 最小代码声明队列、发送消息、监听消息先写一个配置类声明队列Configuration public class RabbitConfig { Bean public Queue helloQueue() { return new Queue(hello, false); } }这里的new Queue(hello, false)第一个参数是队列名称第二个参数表示是否持久化。Hello World 阶段用false不影响验证但如果消息不允许丢失后面一定要改成true同时配合交换机的持久化设置。现在先记住队列是否持久化决定了 RabbitMQ 重启后这个队列还存不存在。发送端的服务类非常简单Service public class HelloSender { private final RabbitTemplate rabbitTemplate; public HelloSender(RabbitTemplate rabbitTemplate) { this.rabbitTemplate rabbitTemplate; } public void send(String message) { rabbitTemplate.convertAndSend(hello, message); System.out.println(发送消息: message); } }convertAndSend的第一个参数是队列名称第二个参数是要发送的内容。这里有一个容易忽略的点我们没有指定交换机但convertAndSend有一个重载方法接收“交换机名、路由键、消息体”如果只传队列名和消息体它会走默认交换机路由键就是队列名。这种方式在第一个 Hello World 里最省事因为它默认把消息精确投递到“同名路由键对应的队列”。接收端用注解方式监听Component public class HelloListener { RabbitListener(queues hello) public void onMessage(String message) { System.out.println(收到消息: message); } }到这里一个消息从发送到接收的最小闭环就完整了。启动 SpringBoot 应用调用一次发送方法控制台会先打印发送日志监听器随即打印收到的内容。3.4 跑起来之后怎么确认消息真的走过了 RabbitMQ第一次跑通后建议打开管理控制台的队列页面你会看到hello队列还存在。如果你只发送不消费队列的Messages Ready数字会增加如果只消费不发送监听器不会打印任何东西如果发送和消费都正常队列的Messages Ready会是 0同时Message Rates图表里能看到一条曲线。这其实是很值得习惯的一个调试动作不要只依赖日志输出学会用管理控制台判断消息到底卡在哪一段。发送日志打印了、但队列里没有消息说明生产者到交换机这段有问题队列里一直堆积、消费者没反应说明监听器容器没注册或配置不正确。4. 集成中常见的坑与排查路径我从三次实际故障里总结的4.1 坑一消息发出去了但监听器就是收不到这是最经典的问题。现象是控制台打印了发送日志管理控制台里队列也确实收到了消息但监听方法没被执行。我第一次遇到时手忙脚乱后来一步步排查才发现是队列名不一致。我在配置类里声明的队列叫hello.queue但监听器写的是hello。RabbitMQ 对队列名是严格区分大小写的只要不一致消息就会被投递到另一个队列当前监听器当然收不到。这个坑的排查思路教你一个固定套路先去队列页面看“有没有未消费的消息”。如果有且Ready数在增加说明消息确实到了队列问题在消费侧如果队列里根本没有消息问题在发送侧。然后逐项检查三个名字发送的队列名、声明的 Queue Bean 名称、RabbitListener 里的 queues 值三者必须完全一致。另外一个隐蔽因素是RabbitListener所在的 Bean 没有被 Spring 扫描到。如果监听器放在了启动类子包之外Spring 容器根本不会注册它自然也不会创建监听容器。检查方法很简单启动日志里会有一行listening相关的内容看不到就说明这个监听器没被识别。4.2 坑二同一个消息被消费了多次这个现象通常不会在 Hello World 阶段出现但只要你在监听器里做了耗时操作就很容易遇到。原因在于 SpringBoot 默认的消费模式是自动确认AUTO框架会在监听方法执行完后才向 RabbitMQ 返回确认。如果你的监听方法执行时间超过了 RabbitMQ 的消费者超时判定或者消费过程中抛出了异常消息就会回到队列头部重新投递给另一个消费者甚至同一个消费者再消费一次。我遇到过的情况是监听器里调了一个外部接口外部服务偶尔超时每次超时都让消息重新入队结果下游接口被同一个消息打了好几次。解决这个问题不能靠调整超时时间核心是做幂等消费也就是在消费前先检查这条消息是否已经处理过。常见的做法是在本地数据库记录消息唯一标识消费前查询。Hello World 阶段不用做得这么完整但你要知道自动确认不等于消息一定只被处理一次。4.3 坑三连接被拒绝或者“发送超时”连接被拒绝的报错五花八门最常见的两种Connection refused和ACCESS_REFUSED - login was refused using authentication mechanism PLAIN。第一种是网络层面的问题优先检查 RabbitMQ 服务是否启动、端口是否是 5672、有没有被防火墙拦截。如果你在远程连接还需要确认 RabbitMQ 的配置文件里没有把 loopback 用户限制打开。第二种是认证问题账号密码、虚拟主机权限不对都会触发。这里的建议是回管理控制台用浏览器确认账号密码能登录再确认该账号有对应虚拟主机的资源配置权限。还有一个容易被误判的坑RabbitMQ 内存告警。当节点内存使用率超过阈值默认 40%生产者连接不会断开但basic.publish会被阻塞表现成“消息发不出去、没有报错、日志像卡住了一样”。排查时看一眼管理控制台首页是否有Alarm红色警告。这个问题的根源很多时候是死信、堆积消息太多可以用rabbitmqctl list_queues name messages快速看哪些队列积压严重。5. Hello World 之后的下一步从验证代码走向真实可用5.1 先补交换机与路由键再把“点对点”升级为“分流”Hello World 用的默认交换机只能做最简单的点对点。真实项目里很少只有一个消费者更多是这样订单创建后同时触发库存扣减、积分增加、通知发送。这时候就要靠交换机来分流。RabbitMQ 最常用的三种交换机类型是direct路由键精确匹配适合按指定消费者分发。fanout不关心路由键广播给所有绑定的队列适合通知类、广播类。topic路由键支持通配符匹配适合按业务维度做模式路由。从 Hello World 切换到 direct 交换机的改动很小只需在配置类中增加一条绑定关系Bean public DirectExchange directExchange() { return new DirectExchange(demo.direct); } Bean public Binding binding(Queue helloQueue, DirectExchange directExchange) { return BindingBuilder.bind(helloQueue) .to(directExchange) .with(hello.key); }发送时把队列名换成交易所名和路由键rabbitTemplate.convertAndSend(demo.direct, hello.key, message);这一步做完你就从“只会发队列”升级到了“会用交换机路由”RabbitMQ 的核心抽象基本握在手里了。5.2 消息确认与可靠性这才是生产环境真正考验你的地方极简集成里看不到的消息丢失风险有好几层生产者发送后不确定有没有到交换机、交换机不确定有没有路由到队列、消费者收到后不确定有没有处理完。对应地RabbitMQ 提供了三个机制。第一生产者端的 Publisher Confirm。开启spring.rabbitmq.publisher-confirm-type: correlated后发送操作会异步回调确认结果。SpringBoot 的RabbitTemplate可以设置ConfirmCallback在回调里检查ack是否为 true否则重发。第二交换机到队列的 Mandatory 机制。开启后如果消息无法路由到任何队列消息会返回到生产者端并触发ReturnsCallback。第三消费者端的手动确认。把监听模式从 AUTO 改成 MANUAL在代码中显式调用channel.basicAck或basicNack。手动确认能让你决定“处理失败了到底重新入队还是丢弃”。这三件事单独拿出来都能写一整篇这里只提醒一点生产环境的可靠性从来不是某一个开关能解决的而是生产者、交换机、队列、消费者四层机制共同配合的结果。极简 Hello World 的意义就是让你先把这条链路上每个角色都跑一遍后续再逐层叠加可靠性控制。5.3 给我的学习路径建议如果你现在刚跑通 Hello World我建议不要急着写各种复杂的业务。先用一周时间把 RabbitMQ 官方教程里的五个章节顺序过一遍Hello World、Work Queues、Publish/Subscribe、Routing、Topics。每章对应一种交换机模式正好把 Hello World 里略过的概念全部补上。然后回到 SpringBoot试着把官方教程里的原生 Java 客户端写法全部改成 SpringBoot 风格。这个过程会让你发现两种写法的差异也更容易理解 SpringBoot 自动配置做了哪些事情。最后找一个小业务场景比如把注册成功的通知改成异步发送加上消息持久化和手动确认试着模拟一次消费者宕机后的消息恢复。等你亲手把消息从“可能丢”变成“基本不丢”你对消息队列的理解就超过了绝大多数只写过 Demo 的开发者。我在实际项目里一直保留着一个习惯每个新项目接入 RabbitMQ 的第一天都会先跑一遍最简单的发送和接收确认环境和网络完全可靠之后才开始写真正的业务逻辑。这个习惯帮我避开了无数次“代码没问题但环境有坑”的尴尬。你第一次跑 Hello World 时如果遇到任何和这篇文章对不上的现象先检查环境再检查配置最后才怀疑代码这个顺序能省掉一大半无谓的调试时间。

相关新闻

如何写出你的第一个金策智算自定义策略:从user_strategy_template到回测验证完整教程

如何写出你的第一个金策智算自定义策略:从user_strategy_template到回测验证完整教程

金融科技后端数据分析AI 应用 【免费下载链接】jin-ce-zhi-suan 【金策智算】➡️不靠情绪买卖、不追小道消息,专注用客观数据辅助决策。 我们仅提供本地化私有行情数据服务与历史回测工具,帮你把主观想法变成可验证的交易规则,用历史数据检验…

2026/10/11 15:59:23 阅读更多 →
算力只是入场券,AI芯片竞争的下半场看生态与合作

算力只是入场券,AI芯片竞争的下半场看生态与合作

1. 从一场跨洋对话说起:AI算力狂飙背后的“隐性瓶颈”前阵子听到苏姿丰和蒋濛的一场对谈,里面有个观点让我印象很深:AI的未来,不只看芯片能跑多快,更看行业怎么合作。乍一听像是场面话,但结合我自己这几年在…

2026/10/11 15:59:22 阅读更多 →
SolidWorks2022安装部署全指南:环境准备、管理镜像与许可配置

SolidWorks2022安装部署全指南:环境准备、管理镜像与许可配置

简介:SolidWorks 2022安装流程文件版指引.pdf是一份面向机械设计、工业设计及相关专业学生的安装操作手册,专门解决SolidWorks 2022在部署过程中步骤繁琐、许可证服务配置易出错等痛点。文档以安装顺序为主线,逐条说明如何解压64位安装包、运…

2026/10/11 15:59:22 阅读更多 →

最新新闻

RAID 0/1/5/6/10全解析:选型、建阵列与故障恢复实战指南

RAID 0/1/5/6/10全解析:选型、建阵列与故障恢复实战指南

如果你跟我一样整天和存储设备打交道,那“RAID 0/1/5/6/10”这几个数字绝对不陌生。很多人刚接触服务器时,第一课就是背RAID级别的概念:0要性能,1要安全,5折中,10又安全又性能。可真到了选型、建阵列、坏盘…

2026/10/11 16:46:53 阅读更多 →
《道德经》第七十七章:损有余而补不足的平衡智慧

《道德经》第七十七章:损有余而补不足的平衡智慧

每次读《道德经》第七十七章,我都会想起某位老前辈说过的一句话:“这个世界上最厉害的人,不是那些什么都抓在手里的人,而是懂得松开手的人。”他说这话的时候,正是他事业最如日中天的阶段,当时我没听懂&…

2026/10/11 16:46:52 阅读更多 →
AI古风女主发型干货:仙气、宫廷、侠女、闺秀、异域、仙尊全拆解

AI古风女主发型干货:仙气、宫廷、侠女、闺秀、异域、仙尊全拆解

AI古风女主翻车,十有八九先烂在头发上。脸再精致,发型一贴头皮,立马像道姑;发冠一多,像义乌小商品批发;发丝一糊,塑料假发感直接拉满。古风发型不是堆簪子,是轮廓、层次、发际线、碎…

2026/10/11 16:46:52 阅读更多 →
自流平专用HPMC源头厂家定制常见问题 采购注意事项汇总

自流平专用HPMC源头厂家定制常见问题 采购注意事项汇总

自流平专用HPMC源头厂家定制常见问题 采购注意事项汇总 选自流平专用HPMC的4大高频踩坑难题很多做自流平砂浆、干粉建材的朋友在采购羟丙基甲基纤维素(HPMC)时,都会碰到这些头疼的问题: 买的材料要么保水够但流动度差,要么流动性好却泌水开裂…

2026/10/11 16:46:52 阅读更多 →
2026昆明景区古建牌坊检测排名 TOP5 CMA 资质机构提供牌坊裂缝检测、牌坊倾斜检测、老化检测 联系方式推荐

2026昆明景区古建牌坊检测排名 TOP5 CMA 资质机构提供牌坊裂缝检测、牌坊倾斜检测、老化检测 联系方式推荐

昆明古城韵味悠长,景区古建牌坊星罗棋布,然而当地检测机构鳞次栉比、鱼龙混杂。景区石牌坊、乡村古牌坊、文物古建牌楼开展结构安全鉴定、修缮验收、文保备案时,大量无资质机构出具报告无法通过住建、文物部门核验。小编实地走访筛选本地正规…

2026/10/11 16:46:52 阅读更多 →
McAfee企业版8.8升级指南:ePO分层升级与老终端续命技巧

McAfee企业版8.8升级指南:ePO分层升级与老终端续命技巧

简介:McAfee 企业版8.8可升级版本是一套面向企业IT管理员与安全运维人员的终端防病毒解决方案,用于构建覆盖病毒扫描、恶意软件防御、网络威胁防护与数据丢失防护的统一安全体系。资源包共34个文件,以msi安装包、exe可执行程序、zip组件压缩包…

2026/10/11 16:45:52 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →