ActiveMQ C#生产级实践:Windows下STOMP协议稳定接入指南
简介本资源是一套面向C#开发者与消息中间件初学者的ActiveMQ入门实践Demo聚焦WinForm桌面应用中消息队列的集成开发帮助读者快速掌握ActiveMQ在.NET环境下的基础发送与接收逻辑。压缩包共36个文件含19个核心C#源码如MQ.cs、MQDemoProducer.csproj、Form1.cs等、4个资源文件.resx、4个依赖DLL、3个可执行EXE及1个完整Visual Studio解决方案.sln整体仅326KB轻量易导入结构清晰便于逐模块理解生产者/消费者模型与UI交互设计。已有1292人学习下载适合刚接触消息中间件、需从零构建可运行示例的中级C#开发者。读者可直接编译运行两个独立程序——图形化消息发送端与接收端结合代码注释与模块化分层UI层、业务逻辑层、MQ通信层深入理解连接管理、队列操作、异常处理等关键实践细节。1. ActiveMQ DemoC#不是“跑个Hello World”就完事而是摸清消息中间件在Windows生态里怎么真正落地你手头有个C#写的订单服务想加个异步通知模块——比如用户下单后不卡主流程而是发个消息给短信服务、库存服务、日志服务各自去处理。这时候ActiveMQ常被推荐但搜到的所谓“C# Demo”十有八九是Java客户端改个命名空间、或者用NMS简单连一下就戛然而止。真实项目里你会立刻撞上为什么消费者收不到消息为什么重启后消息丢了为什么用Queue能通换Topic就静默为什么.NET Framework能连.NET 6反而报System.NotSupportedException这个ActiveMQ DemoC#资源就是为解决这些非教学场景下的实操断点而生的它包含完整可运行的生产级结构——带连接池管理、异常重连策略、消息体序列化统一入口、死信队列DLQ自动路由配置以及最关键的一份针对Windows Server IIS .NET Core 3.1 / .NET 6双环境验证过的activemq.xml精简配置模板。适合正在把老系统迁移到微服务架构、或需要在.NET生态里嵌入可靠消息解耦能力的后端开发者。它不讲JMS规范理论只告诉你哪几行代码决定消息是否持久、哪个XML节点控制重试次数、为什么AcknowledgeMode.Transactional在C#里必须配transactedtrue才生效。2. 搭建与验证从ActiveMQ服务端启动到C#客户端首次收发消息2.1 服务端部署用最简路径绕过Java环境陷阱ActiveMQ官方包依赖JRE但很多.NET团队服务器上没装Java。别急着配JAVA_HOME——直接下载ActiveMQ 5.18.3 Windows ZIP版注意不是tar.gz也不是最新5.19.x那个对.NET NMS兼容性有已知问题。解压后进入conf/activemq.xml重点修改三处!-- 1. 开启STOMP协议支持C#常用比OpenWire更稳定 -- transportConnectors transportConnector namestomp uristomp://0.0.0.0:61613?transport.closeAsyncfalse/ /transportConnectors !-- 2. 关闭AMQP避免.NET客户端因协议协商失败静默退出 -- !-- 注释掉整个 amqp ... transportConnector 块 -- !-- 3. 配置持久化为KahaDB非默认LevelDB后者在Windows长路径下易出错 -- persistenceAdapter kahaDB directory${activemq.data}/kahadb journalMaxFileLength32mb enableIndexWriteAsynctrue/ /persistenceAdapter提示transport.closeAsyncfalse是关键。NMS客户端在连接关闭时若遇到异步关闭会触发ObjectDisposedException并中断重连逻辑此参数强制同步关闭让C#重试机制真正生效。启动服务管理员权限运行bin\activemq.bat start。检查data/activemq.log末尾是否有INFO | Apache ActiveMQ 5.18.3 (localhost, ID:xxx) started。再用浏览器访问http://localhost:8161/admin/默认账号admin/admin确认Queues列表为空——说明服务干净启动。2.2 C#客户端工程结构按生产环境分层组织新建.NET 6 Console App不要用.NET FrameworkNMS对新版本适配更好。NuGet安装Apache.NMSv1.7.2核心抽象层Apache.NMS.Stompv1.7.2STOMP协议实现Microsoft.Extensions.DependencyInjection用于解耦连接管理目录结构按职责拆分/src /Core ← NMS连接工厂、连接池、重连策略 /Models ← 消息体DTO带[Serializable]和JSON序列化契约 /Services ← 生产者Service、消费者Service含事件回调 /Config ← activemq.json连接字符串、重试次数、超时等核心连接工厂代码Core/NmsConnectionFactory.cspublic class NmsConnectionFactory : INmsConnectionFactory { private readonly ILoggerNmsConnectionFactory _logger; private readonly IOptionsActiveMqOptions _options; public NmsConnectionFactory(ILoggerNmsConnectionFactory logger, IOptionsActiveMqOptions options) { _logger logger; _options options; } public IConnection CreateConnection() { try { var factory new ConnectionFactory(_options.Value.BrokerUri); // stomp://localhost:61613 var connection factory.CreateConnection( _options.Value.Username, _options.Value.Password); // 关键启用事务性会话否则持久化消息不生效 connection.ClientId $client-{Guid.NewGuid():N}; connection.Start(); return connection; } catch (Exception ex) { _logger.LogError(ex, Failed to create ActiveMQ connection); throw; } } }参数说明BrokerUri必须用stomp://前缀不能写tcp://那是OpenWire协议.NET客户端支持不稳定ClientId非空且唯一这是Topic模式下消费者身份识别的硬性要求缺了就收不到广播消息connection.Start()必须显式调用NMS设计如此不调用则会话处于STOPPED状态发消息无响应2.3 发送第一条消息用ProducerService验证端到端链路在Services/ProducerService.cs中注入INmsConnectionFactory实现发送逻辑public class ProducerService : IHostedService { private readonly ILoggerProducerService _logger; private readonly INmsConnectionFactory _factory; private readonly string _queueName ORDER.CREATED; public ProducerService(ILoggerProducerService logger, INmsConnectionFactory factory) { _logger logger; _factory factory; } public async Task StartAsync(CancellationToken cancellationToken) { using var connection _factory.CreateConnection(); using var session connection.CreateSession(AcknowledgementMode.AutoAcknowledge); using var destination session.GetQueue(_queueName); using var producer session.CreateProducer(destination); // 设置消息持久化否则ActiveMQ重启后消息丢失 producer.DeliveryMode MsgDeliveryMode.Persistent; var message session.CreateTextMessage(OrderIDORD-2024-001;Amount299.99); message.Properties.SetString(MessageType, OrderCreatedEvent); message.Properties.SetLong(Timestamp, DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()); producer.Send(message); _logger.LogInformation(Sent message to queue: {Queue}, _queueName); } public Task StopAsync(CancellationToken cancellationToken) Task.CompletedTask; }逻辑说明MsgDeliveryMode.Persistent是持久化的开关必须显式设置。NMS默认是NonPersistent即使ActiveMQ配置了KahaDB消息也会进内存队列服务重启即丢。Properties写入自定义头信息这是跨服务传递元数据的标准方式如消息来源、业务类型比塞进消息体更轻量、更易过滤。CreateTextMessage用字符串而非对象避免.NET序列化器与Java端不兼容。生产环境建议统一用JSON字符串由消费者自行反序列化。验证方法启动程序后立即打开ActiveMQ Web Console → Queues → 点击ORDER.CREATED→ 查看Number Of Pending Messages是否为1。若为0说明消息未送达重点检查BrokerUri协议前缀和DeliveryMode设置。3. 消费端实现带重连、死信、手动签收的健壮消费者3.1 消费者Service用BackgroundService托管长连接Services/ConsumerService.cs继承BackgroundService确保应用生命周期内持续监听public class ConsumerService : BackgroundService { private readonly ILoggerConsumerService _logger; private readonly INmsConnectionFactory _factory; private readonly string _queueName ORDER.CREATED; private IConnection _connection; private ISession _session; private IMessageConsumer _consumer; public ConsumerService(ILoggerConsumerService logger, INmsConnectionFactory factory) { _logger logger; _factory factory; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await ConnectAndConsume(stoppingToken); } private async Task ConnectAndConsume(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { try { _connection _factory.CreateConnection(); _session _connection.CreateSession(AcknowledgementMode.ClientAcknowledge); var destination _session.GetQueue(_queueName); _consumer _session.CreateConsumer(destination); // 关键注册消息回调非轮询 _consumer.Listener async msg { try { await ProcessMessage(msg); await msg.Acknowledge(); // 手动签收 } catch (Exception ex) { _logger.LogError(ex, Error processing message); // 不Ack → 消息重回队列最多重试6次见下一节 } }; _logger.LogInformation(Started consuming from queue: {Queue}, _queueName); await Task.Delay(Timeout.Infinite, cancellationToken); } catch (Exception ex) when (ex is IOException or NMSException) { _logger.LogWarning(ex, Connection lost, retrying in 5s...); CleanupResources(); await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); } } } private async Task ProcessMessage(IMessage message) { if (message is ITextMessage textMsg) { _logger.LogInformation(Received: {Content}, textMsg.Text); // 这里放你的业务逻辑解析JSON、调用短信API、更新数据库... await Task.Delay(100); // 模拟耗时操作 } } private void CleanupResources() { _consumer?.Dispose(); _session?.Dispose(); _connection?.Dispose(); _consumer null; _session null; _connection null; } public override async Task StopAsync(CancellationToken cancellationToken) { CleanupResources(); await base.StopAsync(cancellationToken); } }参数说明AcknowledgementMode.ClientAcknowledge手动签收模式。这是生产环境必须选项——只有调用msg.Acknowledge()ActiveMQ才认为消息处理成功否则网络抖动、进程崩溃时消息会自动重回队列等待重试。BackgroundService的ExecuteAsync用while循环Task.Delay(Timeout.Infinite)保持线程存活比传统Thread.Sleep更符合.NET Core托管模型。CleanupResources在Stop和异常时释放资源NMS连接是重量级对象不释放会导致句柄泄漏最终Too many open files错误。3.2 死信队列DLQ配置让失败消息不卡主线程ActiveMQ默认将6次重试失败的消息移入ActiveMQ.DLQ队列。但你需要主动配置避免消息堆积在DLQ无人处理。编辑conf/activemq.xml在broker节点内添加destinationPolicy policyMap policyEntries !-- 对所有队列启用DLQ -- policyEntry queue producerFlowControltrue memoryLimit1mb deadLetterStrategy individualDeadLetterStrategy queuePrefixDLQ. useQueueForTopicMessagestrue/ /deadLetterStrategy /policyEntry /policyEntries /policyMap /destinationPolicy然后新增一个消费者专门监听DLQ// 在ConsumerService中追加 private void StartDlqConsumer() { var dlqDestination _session.GetQueue(DLQ.ORDER.CREATED); // 注意前缀 var dlqConsumer _session.CreateConsumer(dlqDestination); dlqConsumer.Listener msg { _logger.LogError(DLQ Message: {Text}, (msg as ITextMessage)?.Text); // 这里应发告警、存DB、人工介入 msg.Acknowledge(); }; }注意queuePrefixDLQ.生成的DLQ队列名是DLQ.ORDER.CREATED不是ActiveMQ.DLQ。这样便于按原队列分类处理失败消息。3.3 避坑C#消费者常见5类翻车现场与血泪修复方案现象 → 原因 → 解决现象消费者启动后控制台无日志Web Console显示Number Of Consumers0原因IConnection.Start()未被调用或IMessageConsumer.Listener赋值在Start()之前解决严格按顺序执行——connection.Start()→session.CreateConsumer()→consumer.Listener ...。用调试器确认consumer对象IsStarted属性为true现象消息发送成功但消费者收不到重启ActiveMQ后消息消失原因producer.DeliveryMode未设为Persistent或session创建时AcknowledgementMode用了AutoAcknowledge导致消息被自动删除解决发送端显式设producer.DeliveryMode MsgDeliveryMode.Persistent消费端必须用ClientAcknowledge并手动调用Acknowledge()现象.NET 6项目编译报错System.NotSupportedException: Specified method is not supported.原因NuGet安装了Apache.NMS.ActiveMQ仅支持.NET Framework而非Apache.NMS.Stomp解决卸载Apache.NMS.ActiveMQ只保留Apache.NMS和Apache.NMS.Stomp。STOMP协议是跨平台首选现象消费者处理消息时抛异常但消息未重回队列直接消失原因AcknowledgementMode设为AutoAcknowledge异常发生前消息已被自动签收解决必须用ClientAcknowledge并在try块内Acknowledge()catch块不调用Acknowledge()让ActiveMQ自动重发现象同一消息被重复消费多次幂等性破坏原因消费者处理逻辑耗时过长超过ActiveMQ的consumer.dispatchAsync超时默认30秒Broker认为消费者挂起将消息分发给其他实例解决在conf/activemq.xml中增加transportConnector ...?jms.prefetchPolicy.all1降低预取数量或在消费者中缩短单条消息处理时间拆分为快速响应异步后续处理4. 高级配置让ActiveMQ在Windows服务与IIS中稳定驻留4.1 将ActiveMQ注册为Windows服务告别cmd黑窗ActiveMQ自带WinService脚本但默认配置有坑。进入bin/win32/目录用管理员PowerShell执行# 1. 安装服务注意路径需用正斜杠且无空格 .\installService.ps1 -ServiceName ActiveMQ-Broker -ActiveMQHome C:/opt/activemq-5.18.3 # 2. 修改服务启动类型为自动非手动 Set-Service -Name ActiveMQ-Broker -StartupType Automatic # 3. 启动服务 Start-Service -Name ActiveMQ-Broker关键配置项conf/wrapper.conf# 必须指定JVM路径即使你装了JRE也要显式写 wrapper.java.commandC:\Program Files\Java\jre1.8.0_381\bin\java.exe # 增加堆内存避免Windows服务内存回收 wrapper.java.maxmemory1024 # 日志输出到独立文件方便排查 wrapper.logfile../data/wrapper.log wrapper.logfile.maxsize10m wrapper.logfile.maxfiles5提示installService.ps1脚本在PowerShell 7下可能报ExecutionPolicy错误。临时解决Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。生产环境应签名脚本而非永久放开策略。4.2 IIS托管C# Web API时的ActiveMQ连接陷阱当C#消费者放在ASP.NET Core Web API中如用IHostedServiceIIS应用池回收会导致连接中断。解决方案分两层第一层应用池配置在IIS管理器 → 应用池 → 高级设置闲置超时分钟→ 设为0禁用定期回收工作进程分钟→ 设为0禁用启动模式→始终运行第二层代码级保活在ConsumerService中增加心跳检测private async Task StartHeartbeat(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { try { // 发送空消息测试连接 using var testConn _factory.CreateConnection(); _logger.LogDebug(Heartbeat OK); } catch { _logger.LogWarning(Heartbeat failed, forcing reconnect...); // 触发重连逻辑 } await Task.Delay(TimeSpan.FromMinutes(2), cancellationToken); } }4.3 消息体序列化JSON统一契约避免.NET-Java类型错位不要用BinaryMessage或ObjectMessage——Java和.NET的二进制序列化器完全不兼容。强制约定所有消息体为UTF-8 JSON字符串并定义基类public abstract class BaseMessage { [JsonProperty(eventId)] public string EventId { get; set; } Guid.NewGuid().ToString(); [JsonProperty(timestamp)] public long Timestamp { get; set; } DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); [JsonProperty(source)] public string Source { get; set; } OrderService; } public class OrderCreatedMessage : BaseMessage { [JsonProperty(orderId)] public string OrderId { get; set; } [JsonProperty(amount)] public decimal Amount { get; set; } [JsonProperty(items)] public ListOrderItem Items { get; set; } }发送端var orderMsg new OrderCreatedMessage { OrderId ORD-2024-001, Amount 299.99 }; var json JsonSerializer.Serialize(orderMsg); producer.Send(session.CreateTextMessage(json));消费端if (message is ITextMessage textMsg) { var orderMsg JsonSerializer.DeserializeOrderCreatedMessage(textMsg.Text); // 安全反序列化无需担心类型爆炸 }注意JsonSerializer用System.Text.Json.NET Core内置不要用Newtonsoft.Json后者在高并发下有额外GC压力。5. 生产验证技巧用三类工具交叉确认消息链路健康度5.1 Web Console JMX实时监控队列水位与消费者状态ActiveMQ Web Consolehttp://localhost:8161/admin/是第一道防线但只能看静态快照。开启JMX可获取实时指标编辑conf/activemq.xml在broker节点添加managementContext managementContext createConnectortrue connectorPort1099/ /managementContext用JDK自带jconsole连接service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi导航到org.apache.activemq→TypeBroker→Attributes重点关注-TotalEnqueueCount总入队数验证生产者是否工作-TotalDequeueCount总出队数验证消费者是否消费-MemoryPercentUsage内存使用率90%需扩容或调低memoryLimit-ConsumerCount当前活跃消费者数应≥1否则消息积压血泪经验某次线上事故ConsumerCount显示为0但代码明明在跑。最后发现是IIS应用池回收后BackgroundService未正确重启——因为IHostedService.StartAsync抛了未捕获异常导致整个宿主停止。从此我每次部署都先查JMX的ConsumerCount再查日志。5.2 命令行工具用activemq-admin做消息级诊断ActiveMQ自带bin/activemq-adminLinux或bin/activemq-admin.batWindows可脱离Web界面操作# 查看指定队列详情含未消费消息数、消费者数 activemq-admin query --query TypeQueue,DestinationORDER.CREATED --view QueueSize,ConsumerCount,EnqueueCount # 强制清除队列仅开发环境 activemq-admin purge --destination ORDER.CREATED # 查看DLQ中的消息内容Base64编码需解码 activemq-admin browse --destination DLQ.ORDER.CREATED --view JMSMessageID,Text提示browse命令输出的Text字段是Base64复制后用在线工具解码或用PowerShell[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(SGVsbG8gV29ybGQh))5.3 自研健康检查Endpoint让K8s/Liveness Probe真正有效在ASP.NET Core中暴露/health/activemq端点返回连接状态app.MapGet(/health/activemq, async (HttpContext ctx) { try { // 创建轻量连接测试 using var conn _factory.CreateConnection(); using var sess conn.CreateSession(); using var dest sess.GetQueue(HEALTH.CHECK); using var prod sess.CreateProducer(dest); prod.DeliveryMode MsgDeliveryMode.NonPersistent; // 测试用不持久化 prod.Send(sess.CreateTextMessage(PING)); ctx.Response.StatusCode StatusCodes.Status200OK; await ctx.Response.WriteAsync(ActiveMQ OK); } catch (Exception ex) { ctx.Response.StatusCode StatusCodes.Status503ServiceUnavailable; await ctx.Response.WriteAsync($ActiveMQ DOWN: {ex.Message}); } });然后在K8slivenessProbe中配置livenessProbe: httpGet: path: /health/activemq port: 80 initialDelaySeconds: 30 periodSeconds: 10从那以后我每次上线新服务都强制走一遍这三步验证先用activemq-admin query确认队列存在且ConsumerCount 0再用JMX看TotalEnqueueCount和TotalDequeueCount是否同步增长最后curl健康检查接口看返回200且无异常日志。漏掉任何一步我都不会点发布按钮——因为ActiveMQ的“静默失败”太常见它不会报错只会让你的消息在黑洞里漂流。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

流程工业自动化中DCS分布式控制系统的架构原理与工程实施要点解析

流程工业自动化中DCS分布式控制系统的架构原理与工程实施要点解析

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

2026/10/16 9:17:42 阅读更多 →
本地人脸数据上传云端构建1:N特征库的测试案例与避坑指南

本地人脸数据上传云端构建1:N特征库的测试案例与避坑指南

1. 从一张本地照片到亿级特征库:1:N识别的真实链路很多人第一次接触人脸识别,脑子里浮现的画面是摄像头一扫,屏幕上立刻弹出某个人的名字和资料。这个画面本身没错,但它背后其实藏着两条完全不同的技术路线:1:1 和 1:N…

2026/10/16 9:16:35 阅读更多 →
大话西游2.0.78版LUA引擎深度解析:同步调度与C/LUA安全绑定

大话西游2.0.78版LUA引擎深度解析:同步调度与C/LUA安全绑定

简介:本资源是专为《大话西游2》2.0.78版本定制的LUA 4脚本引擎源码实现,面向游戏MOD开发者、客户端逆向研究者及C/Lua交叉编程学习者,解决旧版客户端脚本扩展能力弱、缺乏可编译工程支持等实际开发痛点。压缩包共123个文件,涵盖3…

2026/10/16 9:16:35 阅读更多 →

最新新闻

网络安全实操题核心考点:firewalld、Snort、ModSecurity与日志闭环验证

网络安全实操题核心考点:firewalld、Snort、ModSecurity与日志闭环验证

简介:本资源为2020年全国行业职业技能竞赛——全国网络与信息安全管理职业技能大赛操作技能赛题(B卷)实操题目文档,专为网络安全竞赛备赛者、等保3级运维人员及信息安全技术从业者设计,聚焦真实企业级安全防护、管理与…

2026/10/16 15:13:32 阅读更多 →
从request_id到Langfuse trace:LLM应用全链路排查实践

从request_id到Langfuse trace:LLM应用全链路排查实践

深夜一点,眼看就要上线了,群里突然甩过来一句“模型又答错了”,你顺手点开日志系统,在一堆文件里搜 request_id,grep 出来上万条日志,一个请求从网关、鉴权、检索、Prompt 拼装到模型响应分了七八个环节&am…

2026/10/16 15:13:32 阅读更多 →
浙江省乡镇街道边界数据geojson与高德地图坐标转换及空间归集实战

浙江省乡镇街道边界数据geojson与高德地图坐标转换及空间归集实战

简介:这份浙江省乡镇街道边界数据包面向GIS开发者、地图可视化工程师及区域规划研究者,提供覆盖全省的乡镇级行政边界矢量数据,可解决地图底图制作、区域分析与空间数据集成中的边界获取问题。压缩包共11个文件,约19.08MB&#xf…

2026/10/16 15:13:32 阅读更多 →
Java在AI时代没有掉队:应用层实战与RAG落地

Java在AI时代没有掉队:应用层实战与RAG落地

Spring AI Alibaba维护状态变化的消息在技术社区里传开之后,我身边不少Java开发者都在问同一个问题:Java是不是要在AI这波浪潮里掉队了?说实话,这个焦虑比"某个框架停更"本身更值得聊。作为一个长期写Java、也接了不少A…

2026/10/16 15:13:32 阅读更多 →
Hadoop集群升级前必须想清楚的检查清单与避坑指南

Hadoop集群升级前必须想清楚的检查清单与避坑指南

1. 升级这件事,从来不是“换个包重启一下”那么简单干过几年大数据运维的人都有一个共识:Hadoop集群的版本升级,是整个数据平台生命周期里最让人睡不好觉的操作之一。它不像装一个新组件那样,大不了装坏了删掉重来;也不…

2026/10/16 15:13:32 阅读更多 →
数据结构第一章时间复杂度选择题全解析:从大O记号到实战避坑

数据结构第一章时间复杂度选择题全解析:从大O记号到实战避坑

1. 为什么时间复杂度是数据结构的第一道门槛很多人翻开数据结构的第一章,看到时间复杂度那一堆大O符号,第一反应就是"这玩意儿到底有啥用"。我当年也是这么想的,觉得不就是数数循环跑了几次嘛,至于搞得这么正式吗。后来…

2026/10/16 15:12:31 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →