Windows下WS_MQ试用版安装配置与消息收发实战指南
简介IBM WebSphere MQIBM MQv7.5.0.2 Windows试用版安装包面向需要搭建消息中间件环境的中高级开发者与运维人员。IBM MQ借助消息队列、队列管理器、通道及SSL/TLS加密等安全机制让分布式系统之间实现异步、可靠的数据传递适用于企业应用集成、金融交易、高可用数据流转等核心场景。资源包共1001个文件约357.33MB学习材料以gif演示动画和htm文档为主另配txt与css配置说明、pdf参考手册以及exe、msi和cab安装组件整体覆盖完整安装介质与配套资料。已有372人浏览学习。借助该包可获得完整安装程序和图示化教程对照图解逐步掌握安装配置、队列管理器与通道搭建、消息模式理解以及JMS接口调用并学习基于SSL/TLS与ACL的安全配置思路熟悉runmqsc命令行等管理工具操作显著降低环境搭建和入门周期的踩坑成本。1. 这包 WS_MQ 不是系统组件而是你调通消息队列最快的路假设你在 Windows 开发机上要搭一套消息总线而后端没有现成的环境。下载下来的这个 WS_MQ_V7.5.0.2_TRIAL_FOR_WINDOWS_ML.rar解开之后就是一个带多语言支持的企业级消息队列试用版。它能在不买授权的情况下提供完整的队列管理器、消息通道和监听器能力足够你完成联调和原型验证。适合谁适合那些不想啃开源配置、要用成熟队列行为做本地模拟的开发者。接下来直接说怎么装、怎么配、怎么收发消息。2. 装到 Windows 上从解压到服务启动的 5 个关键步骤2.1 解压前先确认系统类型和权限避免装到一半翻车WS_MQ 的 Windows 安装包对系统的要求并不苛刻但有个前提64 位系统和本地管理员权限。很多同事第一次装的时候直接用普通域账号点安装结果写到 Windows 服务列表时弹 UAC 失败整个安装进程回滚。经验是右键解压后先看安装说明里的系统支持矩阵确认系统位数在 64 位以上内存至少 4GB磁盘剩余空间保证 2GB 以上。我这里说的 ML 是 Multilingual不是机器学习别取错安装包。这里要注意安装包是 .rar所以要用压缩工具解压。建议解压到纯英文路径例如C:\WS_MQ_Trial路径里一旦出现中文名后续命令行加载脚本时偶尔会报编码错误这是老毛病了。如果你打算在 Windows Server 上做更接近生产的验证建议把临时目录和安装目录分开数据目录放到第二块磁盘。因为试用版默认把日志和数据放在一起一旦消息量堆积Windows 系统盘很容易被撑爆。2.2 静默安装与交互安装的实际区别我一般会先跑一次交互安装把安装过程录下来之后用静默方式批量部署。交互安装的步骤是双击setup.exe选择“试用版”勾选客户端和服务端组件。这里有一个容易误导的选项默认只装客户端你要开发本地模拟完整队列必须勾选“服务端”才能创建队列管理器。静默安装的命令行如下setup.exe /silent /acceptlicense yes /datafilepath C:\WMQData /loglevel verbose参数说明/silent表示无人值守/acceptlicense yes在命令行里先确认许可/datafilepath指定数据目录必须放在非系统盘方便后期备份/loglevel verbose会把安装日志写到%TEMP%\WS_MQ_Install.log排查问题时非常有用。逻辑说明这一步做的是把安装路径、组件选择和数据库目录一次性固定下来避免默认路径后来找不到。安装完成后可以在“服务”里看到名字形如WS MQ Queue Manager的服务如果看不到说明服务端组件没装上回到交互安装里重新勾选。2.3 安装后的三个环境变量不设好连不上的坑安装完成不等于能直接用。需要检查系统环境变量MQ_INSTALLATION_PATH是否被设置为安装根目录然后手动把MQ_INSTALLATION_PATH\bin64加到PATH。第三个变量是MQ_INSTALLATION_NAME默认是Installation1。如果不设置命令行工具可能找到旧的默认路径。我见过的最典型情况是PATH 没加命令行工具都提示“无法识别的命令”。解决方式就是打开 PowerShell 执行$env:MQ_INSTALLATION_PATH C:\Program Files\WS_MQ $env:Path ;$env:MQ_INSTALLATION_PATH\bin64 [Environment]::SetEnvironmentVariable(MQ_INSTALLATION_PATH, $env:MQ_INSTALLATION_PATH, Machine)这段脚本把安装路径写到机器级别打开的每个新终端都会继承。需要注意MQ_INSTALLATION_NAME在试用版里往往只允许Installation1如果你以前装过旧版这里要改成不同的名称否则静默安装时会直接失败。还有一个不太显眼的事项安装目录下的.ini文件里可能已经写死了安装路径。如果后来把安装目录手动移到别处这些 ini 文件不会自动更新建议在测试阶段不要随意挪动安装目录。2.4 卸载残留处理为正式版安装留一条干净的路试用版到期或者装坏了需要卸载重装。Windows 的“添加删除程序”里能卸载但卸载后常常会留下 Windows 服务项。我遇到过卸载后重新安装时提示“队列管理器名称已存在”其实就是注册表残留。恢复干净的流程是这样的先用卸载程序正常卸载然后打开 regedit 检查HKEY_LOCAL_MACHINE\SOFTWARE\WS_MQ目录把不存在的安装路径键值删掉。再删除数据目录和日志目录最后检查 Windows 服务列表里是否还有WS MQ Queue Manager如果有用管理员 PowerShell 执行sc.exe delete WS MQ Queue Managersc.exe删除的只是服务注册项不会动磁盘文件。这么做之后重新安装才不会遇到“不能覆盖现有安装”的玄学报错。3. 建队列管理器与通道命令、参数和端口规划3.1 用crtmqm创建队列管理器的正确姿势队列管理器Queue Manager是 WS_MQ 的核心进程所有队列都挂在一个队列管理器下。创建的命令是crtmqm但不直接敲默认参数。先把队列管理器的死信队列设好否则后面消息发送失败时没有地方记录排查问题会非常被动。我通常这样创建crtmqm -q QM_TRIAL -lc -lf 20000 -lp 10000参数说明-q指定死信队列名这里用默认的SYSTEM.DEAD.LETTER.QUEUE也行-lc启用 circular logging试用的日志空间小用循环日志避免日志文件把磁盘写满-lf指定主日志文件大小KB-lp指定主日志文件数量。如果你的队列量大适当调大这两个参数能换来更高的吞吐但这个值不能随意改一旦创建队列管理器之后改变日志参数需要重建所以创建前就要想好。crtmqm执行成功后系统会提示队列管理器已创建但此时是“停止”状态。启动它strmqm QM_TRIAL启动日志会输出到 Windows 事件查看器如果出现可达性错误多半是数据目录权限不对需要给当前用户授予数据目录完全控制权。3.2 监听器端口规划与防火墙放行队列管理器只是内部状态外部应用需要监听 TCP 端口。监听器是独立进程用runmqlsr启动但更可靠的方式是注册到 Windows 服务里让它跟着系统自启。端口我一般选 1414这是消息队列最常见的默认端口如果 1414 被占用换成 2400 也可以但要同步修改客户端连接字符串。创建监听器和通道的脚本如下使用runmqscrunmqsc QM_TRIAL然后输入DEFINE LISTENER(LST_TRIAL) TRPTYPE(TCP) PORT(1414) CONTROL(QMGR) START LISTENER(LST_TRIAL) DEFINE CHANNEL(CHL_TRIAL) CHLTYPE(SVRCONN) TRPTYPE(TCP) MAXINST(100) MAXINSTC(100) START CHANNEL(CHL_TRIAL) END这里必须说明DEFINE LISTENER里的CONTROL(QMGR)表示监听器随队列管理器起停不用手动单独管理CHLTYPE(SVRCONN)是客户端连接通道MAXINST和MAXINSTC限制并发连接数避免连接风暴把 Windows 端口耗尽。通道如果不START客户端连接会被拒这是一次典型的血泪经验。3.3 本地队列与传输队列的关系实际业务里至少需要两类队列本地队列用于缓存消息传输队列用于发送到远端。试用的本地环境里传输队列往往用不上但为了后续迁移不出错建议也建一个。创建本地队列DEFINE QLOCAL(Q.ORDER.IN) MAXDEPTH(50000)参数说明MAXDEPTH表示队列最大深度超过这个值生产者的PUT会被阻塞或报错。测试环境不要设太大否则消息堆积后不容易观察。在创建队列管理器后系统会自动生成一批以SYSTEM.开头的队列其中SYSTEM.DEFAULT.LOCAL.QUEUE可以直接用来做连通测试我通常不删它。如果需要验证跨环境转发可以增加一个传输队列和发送通道。传输队列的命名要和远端定义的队列一致否则消息到了远端直接进死信队列。这个错位问题再专业的老手也容易踩。3.4 配额与队列深度什么时候该看DISPLAY QSTATUS很多人以为队列深度只要不超过MAXDEPTH就行实际还要看队列管理器可用内存。WS_MQ 在消息积压时会把部分消息换页到磁盘换页频次过高会拖垮整个客户端时延。检查当前深度和状态DISPLAY QSTATUS(Q.ORDER.IN) CURDEPTH如果CURDEPTH长期在高位说明消费者跟不上生产者。这时不要盲目调大MAXDEPTH先看消费者的拉取频率。我见过一个测试环境队列管理器内存只有 2GB把MAXDEPTH调到 20 万结果消息一多直接报内存不足服务自动重启。4. 发消息与收消息命令行和 Python 客户端各来一遍4.1 命令行工具发消息3 秒验证队列通不通装完服务端后自带amqsput和amqsget工具最直接的验证方式echo hello trial | amqsput Q.ORDER.IN QM_TRIAL amqsget Q.ORDER.IN QM_TRIAL第一行把字符串写入队列第二行从队列里读出。如果amqsput后直接返回说明队列存在且可写amqsget显示 “hello trial”说明整个队列管理器的存储和读取路径是通的。这里有个小坑amqsget在消息读完后不会退出而是阻塞等待下一条消息测试完需要按CtrlC终止。如果是批处理脚本里调用务必加timeout命令。4.2 用 Python 客户端连接需要先装第三方库Windows 上做开发测试Python 是最快的。需要通过某个第三方库连接 WS_MQ这个库在 PyPI 上可以直接安装pip install pymqi注意安装时本机必须有 C 运行库如果没有直接装会报编译工具错误。解决办法是安装对应的 C 运行库再重试。连接并发消息的代码import pymqi queue_manager QM_TRIAL channel CHL_TRIAL host 127.0.0.1 port 1414 conn_info f{host}({port}) qmgr pymqi.connect(queue_manager, channel, conn_info) queue pymqi.Queue(qmgr, Q.ORDER.IN) queue.put(bhello from python) print(put ok) queue.close() qmgr.disconnect()参数说明queue.put的参数必须是bytes不能用字符串连接信息里host(port)的括号是固定格式不能加空格。如果连接不上优先看监听器是否启动、防火墙 1414 端口是否放行。4.3 拉取消息时注意GET选项读取消息的代码import pymqi qmgr pymqi.connect(queue_manager, channel, conn_info) queue pymqi.Queue(qmgr, Q.ORDER.IN) message queue.get() print(message) queue.close() qmgr.disconnect()queue.get()默认是阻塞读取如果队列为空进程会一直挂起。测试时建议设置超时queue.get(pymqi.MQGMO_OPTIONS_WAIT, timeout5)第二个参数说明timeout是秒超过时间会抛出异常程序就能继续执行。不要在生产位写这种无限阻塞很容易把连接池占满。4.4 连接失败时先看这三个返回值客户端连接失败时报错信息往往是一串代码新手容易慌。我整理了一个简表返回码含义处理方向2009连接被服务端关闭检查监听器和服务器通道2059队列管理器不存在确认队列管理器名称拼写2538端口无法访问检查防火墙和监听器端口这三类占了日常联调 90% 的问题。看到 2009先不要改客户端代码直接到服务器上跑DISPLAY CHSTATUS(CHL_TRIAL)看通道状态。通道处于 RUNNING 才是正常的。5. 试用版避坑指南安装、运行与性能排查的 4 个典型现场5.1 安装完成后服务启动失败事件日志里报“AMQ4214”现象服务安装成功后启动队列管理器失败Windows 事件查看器里能看到类似 AMQ4214 的错误。原因这是试用版最常见的问题——服务账号没有数据目录访问权限。安装程序默认使用LOCAL SERVICE而数据目录在C:\WMQData下权限受限。解决打开“服务”找到WS MQ Queue Manager右键属性设置“此账户”改成当前登录管理员重启服务。这是用一条血泪经验换来的答案别再为这事整夜翻日志。5.2 解压后执行命令行工具提示不是内部或外部命令现象在 PowerShell 里输入crtmqm系统提示无法识别。原因PATH没有包含bin64目录。很多教程里只写了“安装完成后直接可用”实际必须手动加环境变量。解决参考第2.3节设置PATH。检查方法是在 PowerShell 里输入Get-Command crtmqm如果输出是命令路径就说明环境变量生效了。这个习惯非常好遇到命令找不到先查Get-Command而不是重新安装。5.3 频繁掉线日志中大量端到端错误现象客户端收发几十条消息后开始掉线日志里出现大量连接中断的错误。原因这往往是防火墙或端口被占用。试用版的默认通道端口 1414 经常被本机其他服务占了也可能是杀毒软件在中间拦了 TCP 连接。解决换一个端口比如 1415。修改监听器端口后通道不用重建但客户端连接串要立刻改。还要在 Windows 防火墙添加“入站规则”允许该端口。注意杀毒软件最好把 WS_MQ 的安装目录加入白名单否则它的实时扫描会对大量小消息的收发造成性能损耗。5.4 高并发时性能像楼梯式下滑现象写入频率提高后吞吐量不是平滑增加而是一段一段往下跌。原因试用版的日志写入策略默认是同步刷盘每次消息落地都要等磁盘 I/O。消息频率一高瓶颈就出现了。解决可以调日志事件参数但试用版不支持太高阶的优化。最直接的办法是测试时只开一个队列管理器避免多个管理器抢同一块磁盘。二次开发验证时这个性能趋势是可以接受的别拿它当生产性能依据。5.5 重启系统后队列管理器没有自动启动现象Windows 重启后客户端连接全部超时手动启动队列管理器一切恢复正常。原因队列管理器默认不注册为 Windows 服务或者注册服务启动类型是手动。解决在命令行执行strmqsvc -m QM_TRIAL它会注册一个随系统自启的服务。之后再到服务列表里确认启动类型是“自动”。这一步如果不做每次重启后都得手动敲命令时间长了绝对会忘。6. 试用期结束前把配置与数据迁移到正式环境的技巧试用版的授权期限通常 30 天到 90 天你不可能在试用环境里跑正式业务。所以留下可迁移的配置比留下数据更有价值。我习惯用dmpmqcfg导出全部配置再在新环境里执行同一张脚本。导出命令dmpmqcfg -m QM_TRIAL -a -f /path/export.mqsc参数说明-m指定队列管理器-a表示全部对象队列、通道、监听器-f输出到脚本文件。这个脚本在新环境用runmqsc QM_NEW export.mqsc就能重建全部拓扑。数据迁移方面消息数据的导出工作比较麻烦。对于试用环境我通常只验证业务逻辑不保留测试消息。如果你需要保留可以使用传输队列或导出到中间文件但这样做性价比很低。最后形成一个检查清单先迁移配置再补端口放行最后用amqsput发一条消息验证新环境的收发链路。还有一个细节导出的 mqsc 文件里可能包含安装信息相关的对象这些在新环境不一定存在。导入之前用文本过滤器把涉及安装名称的语句自动替换能省去很多报错。最后说一个习惯我会在安装完试用版的第一天就把安装包、许可文件和导出的 mqsc 脚本放到同一个网盘目录。因为试用版的过期提醒不是一次性弹窗而是某天突然拒绝连接那时候再找安装包往往已经来不及。这个习惯救了我很多次希望帮到你。本文还有配套的精品资源点击获取

相关新闻

C语言入门指南:从Hello World到数组函数,零基础搭建完整认知框架

C语言入门指南:从Hello World到数组函数,零基础搭建完整认知框架

很多人在初学编程时,第一站选的就是C语言。但C语言这条路,入门时最容易遇到的困惑不是"语法太多记不住",而是"每个字都认识,拼在一起不知道在干嘛"。我见过不少初学者,照着书敲完一段代码&#xf…

2026/10/13 10:32:11 阅读更多 →
ParticleDesigner Windows版:Cocos2d-x粒子特效可视化调试指南

ParticleDesigner Windows版:Cocos2d-x粒子特效可视化调试指南

简介:本资源是专为Cocos2d-x开发者提供的Windows平台粒子效果可视化编辑工具——ParticleDesigner_windows版,面向游戏开发初学者与中级程序员,解决手动编写粒子参数复杂、调试周期长、视觉反馈滞后等核心痛点,适用于火焰、烟雾、…

2026/10/13 10:32:11 阅读更多 →
MySQL 5.7数据完整性实战:五类约束添加与避坑指南

MySQL 5.7数据完整性实战:五类约束添加与避坑指南

1. 为什么“数据完整性”不是一句空话,而是MySQL里每天都在发生的生死线你有没有遇到过这样的情况:业务系统里突然冒出一批“张三”用户,身份证号全是123456789012345678,注册时间统一显示为1970-01-01?或者财务报表里…

2026/10/13 10:31:10 阅读更多 →

最新新闻

IPS入侵防护系统实战指南:精准防御与零误杀部署

IPS入侵防护系统实战指南:精准防御与零误杀部署

1. 项目概述:这不是防火墙的“加强版”,而是网络边界的“主动哨兵” 很多人第一次听说IPS(Intrusion Prevention System,入侵防护系统),下意识会把它当成“更高级的防火墙”——能拦流量、能设规则、还能看…

2026/10/13 11:19:38 阅读更多 →
PostGIS几何创建核心指南:WKT、SRID与环方向实战

PostGIS几何创建核心指南:WKT、SRID与环方向实战

1. 项目概述:为什么几何图形创建是PostGIS真正的“入门门槛”刚接触PostGIS的人,常以为装好扩展、连上数据库、跑通SELECT ST_AsText(geom)就算入门了。我带过不少从QGIS或ArcGIS转过来的同事,他们能熟练画点线面,却在第一次用SQL…

2026/10/13 11:19:38 阅读更多 →
AI逆向智能体实战:一句话自动化定位网络验证逻辑

AI逆向智能体实战:一句话自动化定位网络验证逻辑

1. 从“一句话”到自动化:AI逆向智能体到底在做什么第一次看到“一句话自动破解网络验证”这种说法,我的反应和大多数人一样——要么是标题党,要么是某个特定场景下的取巧。但把最近几款主流大模型在二进制分析任务上的表现拉出来横向对比之后…

2026/10/13 11:19:38 阅读更多 →
LEF/DEF 5.8解析指南:从UNITS、LAYER到MACRO的物理设计文本验证

LEF/DEF 5.8解析指南:从UNITS、LAYER到MACRO的物理设计文本验证

简介:《LEF/DEF 5.8 语言参考》是Cadence于2017年发布的官方英文技术手册,面向集成电路设计工程师、版图设计人员及EDA工具链使用者,系统讲解LEF与DEF两种IC描述语言的语法规则与设计用途,解决工艺库定义、网表交换与物理实现中的…

2026/10/13 11:19:38 阅读更多 →
LeetCode 167双指针详解:C语言实现有序数组两数之和

LeetCode 167双指针详解:C语言实现有序数组两数之和

刷过 LeetCode 的朋友对 167 这道题应该都不陌生,它经常出现在“双指针”专题的第一页,也被很多面试官当成 C 语言基础功的试金石。题目本身描述很简洁——给你一个 下标从 1 开始 的整数数组,数组已经按非递减顺序排好序,让你找…

2026/10/13 11:19:38 阅读更多 →
Beyond Compare绿色免安装版:便携、纯净、可审计的文件比对方案

Beyond Compare绿色免安装版:便携、纯净、可审计的文件比对方案

简介:这是一份面向软件开发者、运维人员及计算机专业学习者的高效文件比对工具资源,解决代码协作、文档审阅、数据同步与版本差异分析等核心问题。资源为Beyond Compare 4.4.6绿色免安装版,无需注册或破解,解压即用,特…

2026/10/13 11:18:36 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →