Akka.NET Akka.Hosting 健康检查深度解析:集成 Microsoft.Extensions.Diagnostics.HealthChecks 的实战指南
后端微服务【免费下载链接】akka.netCanonical actor model implementation for .NET with local distributed actors in C# and F#.项目地址https://gitcode.com/gh_mirrors/ak/akka.net点击查看免费下载本文以 Akka.NET 仓库中 health-checks.md 文档为主线系统讲解 Akka.Hosting 原生的IAkkaHealthCheck/WithHealthCheck健康检查体系如何把它接入Microsoft.Extensions.Diagnostics.HealthCheckService、如何用委托或依赖注入方式编写自定义检查、如何启用 ActorSystem 存活、Cluster 就绪与 Akka.Persistence 持久化插件等内置检查并结合仓库源码剖析注册、适配与标签过滤的底层实现。1. 为什么不再使用 Akka.HealthChecks而是 IAkkaHealthCheckAkka.NET 官方已弃用独立的 Akka.HealthChecks 包转而提供构建在 Akka.Hosting 之上的更简单、可配置性更强的方案IAkkaHealthCheck接口与WithHealthCheck系列扩展方法。通过 Akka.Hosting 的扩展方法所有注册到AkkaConfigurationBuilder的健康检查都会自动注册进Microsoft.Extensions.Diagnostics.HealthCheckService其调用时机与 ASP.NET Core、Entity Framework 等框架健康检查完全一致。这个设计的关键在于桥接Akka 侧的检查对象实现的是 Akka 自己的接口而微软侧的HealthCheckService只认识IHealthCheck。仓库源码中的 HealthCheckAdapter 正是这个桥接器——它在每次检查时构造一个AkkaHealthCheckContext携带ActorSystem与当前注册的Registration元数据再转发给真正的IAkkaHealthCheck.CheckHealthAsync执行。2. 核心 APIIAkkaHealthCheck、AkkaHealthCheckContext 与 AkkaHealthCheckRegistration三个核心类型都定义在 IAkkaHealthCheck.csIAkkaHealthCheck唯一需要实现的方法为TaskHealthCheckResult CheckHealthAsync(AkkaHealthCheckContext context, CancellationToken cancellationToken default)。其 XML 文档明确说明检查可以涵盖 Akka.Persistence、Akka.Cluster 等插件的健康状态也可以直接向特定 actor 发消息并等待应答。AkkaHealthCheckContext检查执行时的上下文包含ActorSystem当前关联的 ActorSystemActorRegistry等价于ActorRegistry.For(ActorSystem)便于按类型解析已注册的 actorRegistration对应的HealthCheckRegistration可从中读取FailureStatus等注册元数据在测试环境中可能为 null源码注释已说明。AkkaHealthCheckRegistration注册记录承载四组元数据源码中的约束值得注意FailureStatus检查失败时上报的状态传null时默认HealthStatus.UnhealthyTags过滤用标签集合内部以StringComparer.OrdinalIgnoreCase构建大小写不敏感Timeout每次调用的超时不允许为 0 或负数但允许Timeout.InfiniteTimeSpan构造函数与 setter 都会抛ArgumentOutOfRangeException工厂函数实例型注册直接包装已有IAkkaHealthCheckDI 型注册则保存FuncIServiceProvider, IAkkaHealthCheck延迟到执行时从 DI 容器解析。2.1 注册进微软健康检查服务AkkaConfigurationBuilder.Bind() 中有一段关键装配逻辑通过ServiceCollection.AddOptionsHealthCheckServiceOptions().PostConfigureAkkaConfigurationBuilder在 Host 构建完成后把akka.HealthChecks中每个注册项转换为HealthCheckRegistration并追加到opts.Registrations。也就是说你不需要手工调用AddHealthChecks().Add(...)只要 Host 上已调用AddHealthChecks()Akka 的检查就会自动挂载。转换逻辑在 AkkaHealthCheckExtensionsToHealthCheckRegistration()会为每个注册项强制追加常量akka标签public const string AkkaTag akka并生成一个惰性工厂——在健康检查服务实际执行时才从IServiceProvider解析出ActorSystem与检查实例包装成HealthCheckAdapter。3. 委托式健康检查最低仪式感的写法AkkaConfigurationBuilder提供两个WithHealthCheck重载见 AkkaHostingExtensions.cspublic static AkkaConfigurationBuilder WithHealthCheck(this AkkaConfigurationBuilder builder, string name, IAkkaHealthCheck healthCheck, HealthStatus? failureStatus null, IEnumerablestring? tags null, TimeSpan? timeout null); public static AkkaConfigurationBuilder WithHealthCheck(this AkkaConfigurationBuilder builder, string name, FuncActorSystem, ActorRegistry, CancellationToken, TaskHealthCheckResult healthCheck, HealthStatus? failureStatus null, IEnumerablestring? tags null, TimeSpan? timeout null);委托重载内部会用 DelegateHealthCheck 把你的 lambda 包装为IAkkaHealthCheck。下面是官方文档给出的完整示例演示向注册表中的 actor 发送Identify探测其存活builder .WithActorSystemLivenessCheck() // have to opt-in to the built-in health check .WithHealthCheck(FooActor alive, async (system, registry, cancellationToken) { /* * N.B. CancellationToken is set by the call to MSFT.EXT.DIAGNOSTICS.HEALTHCHECK, * so that value could be infinite by default. * * Therefore, it might be a really, really good idea to guard this with a non-infinite * timeout via a LinkedCancellationToken here. */ try { var fooActor await registry.GetAsyncFooActor(cancellationToken); try { var r await fooActor.AskActorIdentity(new Identify(foo), cancellationToken: cancellationToken); if (r.Subject.IsNobody()) return HealthCheckResult.Unhealthy(FooActor was alive but is now dead); } catch (Exception e) { return HealthCheckResult.Degraded(FooActor found but non-responsive, e); } } catch (Exception e2) { return HealthCheckResult.Unhealthy(FooActor not found in registry, e2); } return HealthCheckResult.Healthy(fooActor found and responsive); });这段示例值得逐层解读它同时示范了三档健康状态的语义划分场景返回状态含义actor 在注册表中且Identify应答正常Healthy目标 actor 存在且响应Ask抛出异常超时/无响应Degradedactor 存在但暂时无响应注册表查询失败Unhealthy目标根本不在注册表中r.Subject.IsNobody()Unhealthyactor 曾被注册但已死亡示例中那条注释是生产实践的重要提醒传入的CancellationToken由微软健康检查服务注入默认可能是无限的因此涉及Ask、GetAsync等网络/远程操作的检查最好自行用LinkedCancellationTokenSource加一个非无限超时兜底。仓库的测试 HealthChecksSpec 中ShouldReturnAppropriateResults用例正是按未注册 → Unhealthy、注册存活 → Healthy、PoisonPill杀死后 → Unhealthy三条路径验证了上述状态机并断言了failureStatus: Degraded、tags: [foo, actor]、timeout: 30s等自定义参数被完整记录到注册项中。4. 依赖注入式健康检查1.5.51自 Akka.Hosting 1.5.51 起健康检查支持从 DI 容器注入依赖。核心是泛型重载WithHealthCheckpublic AkkaConfigurationBuilder WithHealthCheck[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T( string name, HealthStatus? failureStatus null, IEnumerablestring? tags null, TimeSpan? timeout null) where T : class, IAkkaHealthCheck { var registration new AkkaHealthCheckRegistration(name, GetServiceOrCreateInstance, failureStatus, tags, timeout); HealthChecks[registration.Name] registration; return this; static T GetServiceOrCreateInstance(IServiceProvider sp) ActivatorUtilities.GetServiceOrCreateInstanceT(sp); }实现上有两点值得注意懒解析注册时只记录一个IServiceProvider - T工厂AkkaHealthCheckRegistration的 internal 构造函数专门接受 factory真正创建实例发生在健康检查服务执行时。健康检查类本身不必注册进 DI工厂使用ActivatorUtilities.GetServiceOrCreateInstanceT()——已注册则解析未注册则用容器内的可用服务构造新实例。但构造函数的依赖必须可解析。同时[DynamicallyAccessedMembers(PublicConstructors)]特性保证了 NativeAOT/trim 场景下构造器不会被裁剪。完整示例来自官方文档// Define a custom health check with DI support public class MyHealthCheckWithDependencies : IAkkaHealthCheck { private readonly ILoggerMyHealthCheckWithDependencies _logger; private readonly IMyService _myService; public MyHealthCheckWithDependencies( ILoggerMyHealthCheckWithDependencies logger, IMyService myService) { _logger logger; _myService myService; } public async TaskHealthCheckResult CheckHealthAsync( AkkaHealthCheckContext context, CancellationToken cancellationToken default) { try { _logger.LogInformation(Running health check with DI); var isHealthy await _myService.CheckServiceHealthAsync(cancellationToken); return isHealthy ? HealthCheckResult.Healthy(Service is healthy) : HealthCheckResult.Unhealthy(Service is not healthy); } catch (Exception ex) { _logger.LogError(ex, Health check failed); return HealthCheckResult.Unhealthy($Health check failed: {ex.Message}); } } } // Register the health check using the generic WithHealthCheckT() method builder .WithActorSystemLivenessCheck() .WithHealthCheckMyHealthCheckWithDependencies( name: MyServiceHealth, failureStatus: HealthStatus.Degraded, tags: new[] { ready, service }, timeout: TimeSpan.FromSeconds(5));注意failureStatus与timeout都是命名参数透传的前者决定检查未主动返回结果时兜底上报什么状态后者约束单次执行的时限。5. 内置健康检查一览所有 Akka.NET 健康检查都会被打上akka标签由 AkkaHealthCheckExtensions 强制追加因此可以方便地通过健康检查端点按标签过滤只暴露或只运行 Akka 相关的检查。5.1 WithActorSystemLivenessCheckActorSystem 存活探针builder.WithActorSystemLivenessCheck( failureStatus: HealthStatus.Unhealthy, // 可选默认 Unhealthy tags: new[] { akka, liveness }); // 可选默认 [akka, liveness]其实现 ActorSystemLivenessCheck 只有两行核心逻辑if (context.ActorSystem.WhenTerminated.IsCompleted) { return Task.FromResult(new HealthCheckResult(status: context.Registration.FailureStatus, description: ActorSystem has terminated.)); } return Task.FromResult(new HealthCheckResult(HealthStatus.Healthy, description: ActorSystem is running.));从源码结构看它通过WhenTerminated是否已完成来判断 ActorSystem 是否已终止失败时上报的是注册项的FailureStatus而非硬编码Unhealthy——这就是failureStatus参数的意义如果你希望 ActorSystem 终止只降级为Degraded而不影响探针整体判定可以显式传入。文档同时提醒Akka.Hosting 通常在 ActorSystem 死亡时本来就会主动关停进程因此该检查更多是一种防御性的显式声明。5.2 WithAkkaClusterReadinessCheck集群就绪探针对 Akka.Cluster 用户AkkaClusterReadinessCheck 解决的是节点还没加入集群就先被负载均衡打流量的问题在成功 join 并进入Up/WeaklyUp之前检查持续返回Unhealthy从而让 LB/服务网格把本节点摘除。public TaskHealthCheckResult CheckHealthAsync(AkkaHealthCheckContext context, CancellationToken cancellationToken default) { if (WeHaveJoined FinishedJoining ! null) return Task.FromResult(HealthyResult(FinishedJoining.Value)); var cluster Cluster.Get(context.ActorSystem); WeHaveJoined cluster.SelfMember.Status is MemberStatus.Up or MemberStatus.WeaklyUp; if (WeHaveJoined) { FinishedJoining DateTime.UtcNow; return Task.FromResult(HealthyResult(FinishedJoining.Value)); } return Task.FromResult(UnhealthyResult(DateTime.UtcNow, context.Registration.FailureStatus)); }实现细节判定条件是本节点 SelfMember 的状态为MemberStatus.Up或WeaklyUp而非已发起 Join类内部缓存了WeHaveJoined/FinishedJoining一旦观测到成功加入就锁定Healthy 结果里会附上从启动到观测到成功加入的耗时BeganJoining在构造时取DateTime.UtcNow默认注册名为akka.cluster.join默认标签为[akka, ready, akka.cluster]其中ready专门用于 readiness 端点过滤见 WithAkkaClusterReadinessCheck 扩展。此外WithClustering支持通过ClusterOptions一键开启public bool ClusterReadyCheck { get; set; } // 默认 false在 WithClustering 实现 中当options is { ClusterReadyCheck: true }时会自动调用builder.WithAkkaClusterReadinessCheck()省去手工注册。5.3 Akka.Persistence 健康检查Journal 与 Snapshot StoreAkka.Hosting 生态为持久化插件提供了开箱即用的检查。Akka.Persistence.Hosting 中的JournalHealthCheck与SnapshotStoreHealthCheck均为 internal分别调用 Akka.Persistence 内置的健康检查 APIvar persistence Persistence.Instance.Apply(context.ActorSystem); var journalResult await persistence.CheckJournalHealthAsync(_journalPluginId, cancellationToken); return journalResult.ToHealthCheckResult();底层 Persistence.CheckJournalHealthAsync / CheckSnapshotStoreHealthAsync 的工作方式是向对应插件 actor 发送CheckJournalHealth/CheckSnapshotStoreHealth消息并Ask回PersistenceHealthCheckResult且会用CancellationTokenSource.CreateLinkedTokenSource把调用方 token 与Settings.AskTimeout关联起来——即使外层 token 是无限的问讯本身也有超时保护这正好呼应了第 3 节里对自定义检查的警告。插件侧返回的 PersistenceHealthStatus 三档状态Healthy/Degraded/Unhealthy会通过HealthCheckExt.ToHealthStatus()映射为微软侧的同名状态Description、Exception和附加Data字典如集群成员数、unreachable 数等诊断数据一并透传到HealthCheckResult。配置方式是在 journal/snapshot 构建器上链式调用WithHealthCheck()见 AkkaPersistenceJournalBuilder 与 AkkaPersistenceHostingExtensionsbuilder.Services.AddAkka(MyActorSystem, configurationBuilder { configurationBuilder // Journal with health check .WithJournal( new SqlServerJournalOptions { ConnectionString ..., IsDefaultPlugin true }, journal journal .AddWriteEventAdapterMyAdapter(adapter, new[] { typeof(MyEvent) }) .WithHealthCheck( unHealthyStatus: HealthStatus.Degraded, name: sql-journal)) // Snapshot store with health check .WithSnapshot( new SqlServerSnapshotOptions { ConnectionString ..., IsDefaultPlugin true }, snapshot snapshot .WithHealthCheck( unHealthyStatus: HealthStatus.Degraded, name: sql-snapshot)); });参数语义以 journal 构建器为准snapshot 构建器对称unHealthyStatus默认HealthStatus.Degraded插件报告不健康时最终上报的状态name可选不传时默认使用插件 HOCON id例如akka.persistence.journal.{JournalId}tags可选journal 检查默认标签为[akka, persistence, journal]snapshot 侧则为akka、persistence、snapshot-store家族便于按标签过滤。也可以把 journal 和 snapshot 合并配置builder.Services.AddAkka(MyActorSystem, configurationBuilder { configurationBuilder .WithJournalAndSnapshot( new SqlServerJournalOptions { ConnectionString ..., IsDefaultPlugin true }, new SqlServerSnapshotOptions { ConnectionString ..., IsDefaultPlugin true }, journal journal.WithHealthCheck(), snapshot snapshot.WithHealthCheck()); });这些检查会自动完成校验持久化插件配置是否正确、测试到底层存储数据库、云存储等的连通性、插件正常时上报Healthy、发现问题时上报可配置的Degraded/Unhealthy。对有特殊检查需求的插件构建器还提供WithCustomHealthCheck(AkkaHealthCheckRegistration)允许你直接塞入自己的注册项替代默认实现。一个容易踩坑的点在 AkkaPersistenceJournalBuilder.Build() 的实现里健康检查的注入发生在Build()最前面、任何早退逻辑之前因此只调用journal.WithHealthCheck()而不配置任何 event adapter检查项也会被正常注册——仓库测试 UnifiedApiSpecs 中的Journal_health_check_should_be_registered_without_event_adapters正是针对这一回归场景。6. 端到端示例在 Web Host 中落地仓库自带示例 Akka.Hosting.Asp.LoggingDemo 展示了完整的接线方式var builder WebApplication.CreateBuilder(args); builder.Services.AddHealthChecks(); builder.Services.AddAkka(MyActorSystem, (configurationBuilder, serviceProvider) { configurationBuilder .ConfigureLoggers(setup { setup.LogLevel LogLevel.DebugLevel; setup.ClearLoggers(); setup.AddLoggerFactory(); }) .WithAkkaClusterReadinessCheck() .WithActorSystemLivenessCheck() .WithHealthCheckTestHealth(di-test, HealthStatus.Unhealthy, new[] { test, custom }) .WithActors((system, registry) { /* 启动并注册 actor */ }); });要点复述AddHealthChecks()与AddAkka(...)的先后无所谓真正生效的是AkkaConfigurationBuilder.Bind()里的PostConfigure钩子它在 Host 组装阶段统一完成注入。之后你就可以按 ASP.NET Core 惯例映射/health端点、用tags过滤器区分 livenessakka、liveness与 readinessready探针。7. 关键结论速查主题结论依据检查的挂载方式通过PostConfigureHealthCheckServiceOptions自动注入无需手工AddT()AkkaConfigurationBuilder.csBind()统一标签每个检查强制追加akka标签大小写不敏感AkkaHealthCheckExtensions.cs委托检查包装lambda 被包装为 internal 的DelegateHealthCheckDelegateHealthCheck.csDI 解析WithHealthCheckT使用ActivatorUtilities.GetServiceOrCreateInstanceT检查类无需预注册AkkaConfigurationBuilder.csLiveness 判定ActorSystem.WhenTerminated.IsCompleted即判失败ActorSystemCheck.csReadiness 判定SelfMember 状态为Up/WeaklyUp才 Healthy默认标签含readyAkkaClusterHealthCheck.cs持久化检查超时与Settings.AskTimeout关联的 linked CTS天然有上限Persistence.cs行为回归验证状态机三路径 DI 解析 自定义参数透传HealthChecksSpec.cs掌握以上内容后你可以为自己的 Akka.NET 服务建立完整的 liveness/readiness 双探针体系用WithActorSystemLivenessCheck兜底进程活性、用WithAkkaClusterReadinessCheck控制集群流量接入、用持久化检查保障存储连通性再以委托或 DI 式WithHealthCheck补上针对关键 actor 的业务级探测——全部自动纳入微软健康检查框架的调度、超时与标签过滤体系。赞分享后端微服务【免费下载链接】akka.netCanonical actor model implementation for .NET with local distributed actors in C# and F#.项目地址https://gitcode.com/gh_mirrors/ak/akka.net点击查看免费下载相关推荐GyroFlow免费开源视频防抖神器告别画面抖动专业级稳定效果轻松实现GyroFlow免费开源视频防抖神器告别画面抖动专业级稳定效果轻松实现 你是否曾为拍摄的视频画面抖动而烦恼无论是手持拍摄的日常vlog、运动相机记录下的极视频处理桌面应用音视频终极指南Kubernetes健康检查探针深度解析与实战配置终极指南Kubernetes健康检查探针深度解析与实战配置 Kubernetes健康检查探针是保障容器化应用稳定运行的核心机制能够自动检测并恢复异常容器有文档教程云原生OneUptime容器健康检查终极指南与Kubernetes探针深度集成OneUptime容器健康检查终极指南与Kubernetes探针深度集成 OneUptime作为完整的开源可观测性平台提供了强大的容器健康检查能力能够与K可观测性后端运维前端云原生微服务AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

手把手拆解CoolWeather:Android新手必做的天气项目实战

手把手拆解CoolWeather:Android新手必做的天气项目实战

如果你学 Android 学到一定程度,整天对着 TextView、Button 打转,想找个完整项目练手,那 CoolWeather 这个名字多半听过。它是《第一行代码》里贯穿后半本的重头戏,一个联网的天气应用——启动之后先选城市,然后展示当…

2026/10/14 15:58:04 阅读更多 →
Android天气App实战:从CoolWeather项目掌握网络请求、JSON解析与工程分层

Android天气App实战:从CoolWeather项目掌握网络请求、JSON解析与工程分层

这本书的最后一章实战项目是一道分水岭:前面十几章都是小模块,照着敲完也就记得几个API,只有到天气应用这一步,你才会第一次面对“从零拼一个完整App”的真实压力。也正是从这个项目开始,很多人彻底分清了“会看代码”…

2026/10/14 15:58:04 阅读更多 →
MySQL性能排查第一课:SHOW FULL PROCESSLIST实战指南

MySQL性能排查第一课:SHOW FULL PROCESSLIST实战指南

当数据库告警电话在凌晨两点把你吵醒,监控面板上CPU曲线已经拉平,应用日志里开始蹦出“connection refused”,你手头最想看到的往往不是更多曲线图,而是当前这一刻MySQL里面到底在跑什么。我遇到这种情况,第一反应永远…

2026/10/14 15:58:04 阅读更多 →

最新新闻

AI Agent状态清理:超时重试背后的系统性风险与四维治理

AI Agent状态清理:超时重试背后的系统性风险与四维治理

1. 这不是超时和重试的问题,是状态管理的系统性溃败“给 AI Agent 加超时和重试后,我才发现真正的坑在状态清理”——这句话刚在内部技术群刷出来时,我正盯着一个跑了37分钟、卡在waiting_for_tool_execution状态、内存占用飙升到4.2GB却毫无…

2026/10/14 16:41:53 阅读更多 →
嵌入式Qt记事本开发全链路:从交叉编译到中文文件IO

嵌入式Qt记事本开发全链路:从交叉编译到中文文件IO

简介:这是一份基于Qt6开发的跨平台记事本项目源码,面向嵌入式与桌面应用开发初学者及Qt进阶学习者,聚焦GUI界面构建、文件编码处理与轻量级文本编辑功能实现。项目完整呈现了现代C在Qt框架下的典型工程实践,涵盖主窗口&#xff08…

2026/10/14 16:41:53 阅读更多 →
计算机系统概论第一章答案精讲:ISA、微架构与算法性质

计算机系统概论第一章答案精讲:ISA、微架构与算法性质

简介:计算机系统概论(原书第二版)第一章习题答案以PDF形式提供,面向计算机专业学生、考研读者和自学入门者,用于对照教材习题检验对计算机系统基础概念的掌握。内容选自原书附录的精选解答,覆盖冯诺依曼通用…

2026/10/14 16:41:53 阅读更多 →
远视储备与近视防控:从原理到实操的家长指南

远视储备与近视防控:从原理到实操的家长指南

1. 远视储备不是“储备”,而是一笔会不断消耗的视力存款1. 远视储备不是“储备”,而是一笔会不断消耗的视力存款1.1 远视储备到底是什么很多家长第一次听到“远视储备”这个词,是在幼儿园体检或者眼科门诊的报告单上。医生指着上面的数字说&a…

2026/10/14 16:41:53 阅读更多 →
Python数据挖掘实战:K均值聚类从原理到应用

Python数据挖掘实战:K均值聚类从原理到应用

1. 从一个真实需求说起:为什么K均值聚类值得你花时间搞懂做数据挖掘这些年,我越来越觉得,K均值聚类是那种“看起来简单、用起来真香、但踩坑也真不少”的算法。很多刚入门的朋友一听到“无监督学习”四个字就头大,觉得没有标签怎么…

2026/10/14 16:41:53 阅读更多 →
MinGW-w64离线安装包:断网Windows下C/C++工具链部署指南

MinGW-w64离线安装包:断网Windows下C/C++工具链部署指南

简介:MinGW-w64是为64位Windows系统打造的GCC工具链离线安装包,面向需要在Windows环境下学习或开展C语言开发的程序员。压缩包约2000个文件、133.98MB,主要由h头文件、Python脚本、a静态库、pyc编译文件、exe可执行程序、dll动态库及少量c源文…

2026/10/14 16:40:52 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →