找到 14603 篇与 陆伍 相关的结果 - 第 29 页
-
Adnify {card-default label="? 项目信息"} ? 项目名称:Adnify ? 开发语言:TypeScript ⭐ Star数:158 | ? Fork数:49 ? 开源协议:None ? 项目地址:https://gitee.com/adnaan/adnify {/card-default} 项目介绍 一款具备自主规划、编码调试与上线部署能力的本地 AI 智能体 IDE。像机灵的水獭?,作为你的队友全程参与项目构建。 项目详情 项目截图 Adnify 中文 | English | 日本語 | 한국어 | Español | Français | Deutsch | Português (Brasil) | Русский Connect AI to Your Code. 面向直接执行与可审查多任务编排的 AI 原生工程工作台。 项目截图 项目截图 项目截图 项目截图 项目截图 项目截图 项目截图 项目截图 Adnify 将代码编辑、AI 执行、素材生成和浏览器验证放进同一个桌面工作区。使用 Agent Mode 直接分析和实现,或使用 Plan Mode 澄清需求、审查任务图、按依赖执行并验收结果;跨窗口管理命令和后台服务,通过系统通知或自己的 Webhook 接收工具获取任务结果。 项目截图 ? 荣誉奖杯:鸣谢墙 "Adnify 的每一行代码,都有大家投喂的能量注入!" ⚡️感谢以下慷慨的支持者,你们提供的咖啡、奶茶和能量饮料是 Adnify 进化最强劲的动力! 排名不分先后,信息如有错误或遗漏,请及时联系作者 支持者投喂方式荣誉称号日期留言okay.? 奶茶快乐源泉注入者2026-03-07一杯快乐水,代码没 Bug!✨唐先生☕ 咖啡专注燃料赞助者2026-04-17一杯咖啡,续航下一次构建。。可乐夏日冰可乐2026-07-21一杯冰可乐,续航下一次构建。*寒☕ 咖啡咖啡动力赞助者2026-07-27一杯美式,代码写不停! ✨联系与交流 欢迎加入交流群,一起讨论 Adnify 的使用和开发! 微信群QQ 群作者微信项目截图项目截图项目截图扫码加入微信群QQ群号: 1076926858微信号: adnaan_worker? 如有问题或建议,也可以直接在 Gitee Issues 或Github Issues 提交? 查看完整更新日志 → 目录 架构设计 核心特性 素材生成 浏览器验证 执行管理 通知与后台任务 为什么选择 Adnify 快速开始 品牌素材 功能详解 快捷键 项目结构 贡献与反馈 ? 架构设计 项目截图 核心模块概览 Renderer UI src/renderer 中的 React 组件负责编辑器、Agent 交互界面、Plan 工作台、终端、本地预览以及所有面向用户的交互流程。 Agent 运行时 src/renderer/agent 为 Agent 和 Plan 任务 Worker 提供统一执行内核,覆盖模型路由、上下文流转、工具策略、权限审批、预算和异常恢复。 Plan 运行时 Plan 领域层独立管理需求、任务依赖、执行状态、产物、验收和历史记录;每个任务复用经过验证的 Agent 内核运行。 状态与会话 渲染侧 stores 管理 UI 状态、任务线程、检查点、分支和会话生命周期。独立会话存储进程持久化 SQLite 历史,冷热消息窗口限制界面加载的历史消息量。 前端服务 渲染进程中的轻量服务负责终端体验、补全、workspace/session 辅助能力, 并统一发起跨 Electron 边界的请求。 Renderer Workers 浏览器 workers 处理文本或 diff 等重计算任务, Monaco language workers 则把编辑器语言服务从 UI 线程中拆开。 Preload Bridge src/main/preload.ts 通过类型化的 contextBridge 暴露能力, 让 renderer 在不直接接触 Node 的情况下访问特权功能。 IPC Handlers src/main/ipc/*.ts 是渲染层与主进程之间的契约边界, 负责校验请求并路由到主进程能力。 共享契约 src/shared 存放跨进程复用的类型、配置、工具函数以及共享错误定义。 主进程服务 src/main 负责窗口与应用生命周期、文件系统和 shell 权限、命令调度、LLM 与 MCP 后端、LSP 管理、通知及独立服务的协调。 独立服务进程 代码索引、会话存储、素材存储和内容处理通过 Electron utility process 按需启动。同工作区的多个窗口共用索引服务,解析和 SQLite Worker 在该服务内部运行。详见进程隔离。 并发处理优势 进程隔离 renderer 专注交互与编排, main process 通过明确的 IPC 边界承载特权操作。 后台任务分工 renderer workers 承担界面侧计算,独立服务进程负责索引、数据库、嵌入计算和大文档解析,并统一管理启动、超时、退出和异常恢复。 运行安全 preload bridge、共享契约和主进程安全层共同收窄能力暴露面, 让系统边界更清晰也更易审计。 ✨ 核心特性 ? 极致视觉体验 多主题支持: 内置 4 套精心设计的主题 Adnify Dark - 默认深色主题,柔和护眼 Midnight - 深邃午夜蓝,专注编码 Cyberpunk - 霓虹赛博朋克风格 Dawn - 明亮日间主题 玻璃拟态设计: 全局采用毛玻璃风格,配合微妙的流光边框和动态阴影 沉浸式布局: 无框窗口、Chrome 风格标签页、面包屑导航 alt text alt text alt text alt text ? 两套目标明确的 AI 工作流 Adnify 只保留两种工作模式。原有独立 Chat 模式已合并进 Agent,提问、分析和实现共享同一条上下文链路,不再需要先判断“该聊天还是该执行”。 Agent Mode ? — 直接执行 在同一任务线程中完成项目问答、代码检索、文件修改、命令运行、资料查询和结果验证。 工具权限、检查点、诊断、循环检测和异常恢复,让自动执行过程始终可观察、可审批、可回退。 渐进式上下文压缩与摘要/Handoff 机制,支持持续推进长周期任务。 Plan Mode ? — 先审查,再执行 四阶段工作台覆盖 需求确认 → 计划审查 → 执行中心 → 结果验收。 Planner 生成带依赖关系、预期产物、优先级、角色/模型分配以及串并行策略的任务图。 执行前自动检查依赖环、缺失前置任务和并行写冲突。 每个任务在基于统一 Agent 内核的隔离 Worker 线程中运行;可查看实时进度、进入子任务线程、处理审批、暂停/恢复执行、要求调整并最终验收。 Plan Mode ? Agent 工具与上下文 工作区操作:在作用域授权和 Diff 预览保护下读取、新建、编辑、移动或删除文件。 代码智能:文本/正则检索、LanceDB 语义搜索,以及基于 LSP 的符号、定义、引用、悬停信息和诊断。 终端执行:前台/后台命令、实时输出、交互输入、任务停止以及可靠的退出码捕获。 研究与集成:Web 搜索、URL 读取、MCP 工具/资源/提示词和可复用 Skills。 智能上下文引用:通过文件名及 @codebase、@git、@terminal、@symbols、@web 添加上下文,也可直接拖入文件或目录。 模型自由切换:支持 OpenAI、Anthropic、Google、DeepSeek、Ollama 及 OpenAI 兼容服务,并提供推理等级和厂商参数控制。 Agent 工具 ? 素材生成与素材库 接入自己的服务:在「设置 → 扩展 → 素材能力」中连接图片、视频、音频或文件的 HTTP JSON API,可根据接口文档生成配置草稿,也支持手动编辑与 JSON 导入。 在任务中生成素材:启用后的能力可由 Agent 直接调用,按服务能力传入参考图;支持同步结果和异步任务,重启后可恢复未完成任务的状态查询。 预览和复用结果:在会话中放大图片、切换多份结果、播放视频和音频、定位文件或导出,在素材库中浏览已保存的结果与参考图历史。 控制保存位置:支持全局或项目专属输出目录,下载失败可单独重试,无需重新生成;密钥使用安全存储,配置导出不包含密钥。 配置方式与接口示例见素材能力。 ? 浏览器验证与多设备预览 直接验证前端修改:Agent 可打开开发预览或 HTTP(S) 页面,检查 DOM、样式、布局、控制台和网络诊断,并截图交给已配置的视觉模型分析。 操作真实页面:支持点击、填写表单、按键、滚动、导航和等待元素出现,将页面交互纳入验证流程。 检查响应式布局:切换桌面、手机和平板视图,支持横竖屏;切换时保留页面和表单内容,预览会自动缩放以适应面板。 项目登录态隔离:每个项目拥有独立的持久浏览器存储,同项目多窗口共享登录态,不同项目使用相同 localhost 地址也不会串用数据。 设备模拟基于 Chromium。升级到项目独立会话后,各项目预览首次使用需要重新登录。详见浏览器预览。 ⚙️ 执行管理与服务托管 跨窗口集中查看:从终端面板或「设置 → 编辑器」打开执行管理器,查看命令、后台服务、终端会话、容量占用、等待原因和退出码。 管理运行与历史:取消排队、停止作业、查看或导出日志,固定保留或删除历史归档;重启应用后仍可查看已保存的输出。 托管开发服务:可显式托管运行中的本地后台服务,关闭所有窗口后仍通过系统托盘管理。退出 Adnify 会停止托管服务,重启只恢复日志,不自动重启服务。 设置资源限额:按窗口和任务配置并发、队列,以及输出、磁盘日志和历史预算;普通命令与后台服务分别计量,历史记录不占进程名额。 回收选定的空闲会话:将本地 Agent 终端标记为可丢弃后,才允许空闲回收;人工接管、仍被占用、状态未知或有子进程的会话会保留。 ? 通知推送与后台任务 回看错过的消息:右下角常驻消息中心,分别查看编辑器提示和工作区任务事件,支持未读筛选、标记已读、查看推送状态及跳转对应任务。 选择需要关注的事件:使用「推荐提醒」「仅任务结果」或指定事件,接收完成、失败、等待输入、审批、Plan、索引和素材事件;系统通知支持仅后台窗口提醒,并可点击返回对应会话。 将结果推送到自己的工具:最多配置 5 个通用 Webhook 通道,支持事件筛选、请求头、JSON 消息模板和测试发送。推送内容为事件摘要,Webhook 配置加密保存,不随普通设置导出。 跟进长时间任务:在系统支持时显示任务栏或 Dock 进度,可选在任务执行期间防止自动休眠;唤醒后检查当前模型服务地址可达性与已有 MCP 连接状态。 定位性能问题:在「设置 → 日志与诊断」导出进程内存快照或采集 10 秒性能记录,将资源占用关联到窗口和独立服务进程。 使用说明:通知与外部推送、后台任务、性能诊断。 ? 开放的 AI 生态 Skills:从市场或 GitHub 安装,创建项目级/全局指令包,并支持自动或显式加载。 MCP:发现并安装 npm、PyPI、Docker/OCI、Cargo、NuGet、MCPB、HTTP、SSE 等类型的服务;按需支持热重载与 OAuth。 跨编辑器迁移:发现并导入 Claude Desktop/Code、Codex 和 Cursor 中兼容的 MCP、Skills 与 Rules,无需重新搭建配置。 项目记忆:通过带审批的写入路径保存项目约定与长期知识。 ? 为什么选择 Adnify 真正受控的规划流程:Plan Mode 不是更长的提示词,而是可审查的任务图、执行前确认、实时 TaskBoard 和最终结果验收。 真实的任务编排:内置依赖调度、并发上限、任务级角色/模型选择、产物契约、隔离任务线程和结果汇总。 并发修改的 worktree 隔离:可写并行任务使用独立 Git 检出与分支,通过合并队列回收结果,并提供冲突恢复操作。详见Worktree 执行车道。 面向长会话的架构:四级上下文压缩、摘要/Handoff、SQLite 任务线程持久化以及冷热消息加载共同支撑长周期工作。 可信的终端状态:OSC 633 Shell Integration 捕获命令边界和退出码,不支持原生集成时自动降级到管道 Shell 方案。 从实现到页面验证:在同一任务中生成素材、修改前端并检查或操作实时预览,覆盖手机和平板布局。 可查看和管理的后台执行:跨窗口管理命令和托管服务、保留输出日志,并通过系统通知或 Webhook 接收完成与审批提醒。 高容错代码编辑:九种匹配策略应对格式漂移,配合流式 Diff、检查点和任务线程分支,使修改可审查、可恢复。 执行后验证:Agent 可调用 LSP 诊断与项目命令验证修改,再汇报最终结果。 ? 专业代码编辑 Monaco Editor: VS Code 同款编辑器内核,完整的编辑器功能 多语言 LSP 支持: TypeScript/JavaScript、Java(需 JDK 21+)、Python、Go、Rust、C/C++、HTML/CSS/JSON、Vue、Zig、C# 等 10+ 语言 完整 LSP 功能: 智能补全、跳转定义、查找引用、悬停提示、代码诊断、格式化、重命名等 智能根目录检测: 自动识别 monorepo 子项目,为每个子项目启动独立 LSP AI 代码补全: 基于上下文的智能代码建议(Ghost Text),实时显示 AI 建议 内联编辑 (Ctrl+K): 选中代码后直接让 AI 修改,无需离开编辑器 Diff 预览: AI 修改代码前显示差异对比,支持接受/拒绝每个修改 内置调试面板: 为已支持的调试适配器提供断点、变量、调用栈、调试控制台和启动配置 text ? 强大的搜索与工具 快速打开 (Ctrl+P): 模糊搜索快速定位文件,支持路径匹配 全局搜索 (Ctrl+Shift+F): 支持正则、大小写敏感、全字匹配,实时显示结果 语义搜索: 基于 AI Embedding 的代码库语义搜索,理解代码含义 混合搜索: 结合语义搜索和关键词搜索,使用 RRF 算法融合结果 集成终端: 基于 xterm.js + node-pty,支持多 Shell(PowerShell, CMD, Bash, Zsh) 支持分屏、多标签、终端复用 Shell Integration 追踪命令边界、工作目录和退出码,并为不支持的 Shell 提供降级方案 ? 远程 SSH 终端: 内置原生 SSH 客户端,直接连接远程服务器,支持密钥认证 支持远程文件浏览、上传/下载,以及 SSH 环境中的自动 Shell Integration 本地服务预览: 从终端活动中识别开发服务器地址和候选端口 在隔离的 Webview 标签页中打开本地应用,并通过 Local Servers 面板统一管理 支持 Agent 页面检查与交互、手机和平板布局,以及按项目隔离的持久会话 Git 版本控制: 完整的 Git 操作界面,变更管理、提交历史、Diff 视图 可视化分支管理、冲突解决 支持 Git 子命令白名单,安全可控 文件管理: 虚拟化渲染支持万级文件,大型项目流畅浏览 Markdown 实时预览、图片预览 文件树拖拽、右键菜单 代码大纲: 显示文件符号结构(函数、类、变量),快速导航 问题面板: 实时诊断显示错误和警告,支持一键跳转 text ? 安全与其他特性 安全特性 工作区隔离、敏感路径保护(.ssh, .aws, .gnupg 等) 带权限审批的命令执行与 Shell 注入检测 工作区外文件需要显式授权 Webview 导航保护与最小化 Electron IPC 能力暴露 多窗口与工作区 支持多窗口同时打开不同项目 多工作区管理,快速切换工作区 工作区状态自动保存和恢复 支持 monorepo 多根工作区 其他特性 命令面板 (Ctrl+Shift+P),快速访问所有功能 SQLite 任务线程历史,支持检查点、分支、Plan 历史和异常恢复 Token 统计,实时显示消耗 完整中英文支持,自动检测系统语言 自定义快捷键,支持 VSCode 风格快捷键 引导向导,新手友好 Tree-sitter 解析 20+ 语言,精确代码分析 自动更新,静默下载新版本 ? 快速开始 环境要求 工具版本说明Node.js24.x 中的 24.19.0+(^24.19.0)仓库基线钉在 .nvmrc 和 .node-version,Node 22 与 25+ 不在支持的引擎版本范围内。pnpm11.22.0(精确)与 packageManager / engines.pnpm 完全一致,使用 corepack enable 启用 Corepack。Git较新版本即可—Python可选仅在需要从源码编译原生模块时需要package.json 的 engines 和 packageManager 声明了所需版本,preinstall(scripts/ensure-pnpm.js)会拦截其他包管理器。安装前请切换到仓库指定的 Node 版本和 pnpm 11.22.0。 开发环境运行 # 1. 克隆项目 git clone https://github.com/ad-naan/adnify.git # 或:git clone https://gitee.com/adnaan/adnify.git cd adnify # 2. 切换到仓库钉死的 Node(任选其一) # nvm use # 读取 .nvmrc # fnm use # 读取 .node-version # mise install # 读取 mise.toml # 3. 启用 Corepack,保证 pnpm 与 packageManager 一致 corepack enable # 4. 安装依赖 pnpm install # 5. 启动开发服务器 pnpm dev若出现 Electron failed to install correctly,请在 Node 24.19.0+ 下删除 node_modules/electron 后重新执行 pnpm install。 打包发布 # 1. 替换品牌资源 # 统一放在 public/brand/: # icons/ 应用图标,logos/ 应用内 Logo,ip/ IP 形象,welcome/ 欢迎/启动页素材 # 2. 构建安装包 pnpm dist # 生成的文件位于 release/ 目录? 品牌素材 Adnify 的品牌资源统一收纳在 public/brand/,README 首屏、欢迎页、应用图标与 IP 形象都从这里引用,后续替换素材时不需要在多个目录里来回找。 深色 Logo 项目截图 浅色 Logo 项目截图 应用图标 项目截图 项目截图 项目截图 项目截图 项目截图 项目截图 目录用途说明public/brand/logos/应用内 Logoapp.png 用于深色场景,app-light.png 用于浅色场景public/brand/icons/系统/平台图标Windows .ico、macOS .icns、Linux .png 与多尺寸图标输出public/brand/ip/AI 助手与 IP 形象包含优化后的 WebP 素材,可用于 README、欢迎页与聊天助手形象public/brand/welcome/欢迎页视觉dark.webp 与 light.webp 分别服务深色/浅色主题图标资源由 public/brand/logos/*.png 生成。替换 Logo 后可运行: pnpm assets:icons更多资源说明见 public/brand/README.md。 ? 功能详解 配置 AI 模型 点击左下角设置图标或按 Ctrl+, 在 Provider 选项卡选择 AI 服务商并输入 API Key 选择模型并保存 支持 OpenAI、Anthropic、Google、DeepSeek、Ollama 及自定义 API 选择工作模式 Agent Mode 是问答与实现的默认工作区。你可以询问项目情况、使用 @ 添加上下文或直接描述修改目标;Agent 会在同一任务线程中检查文件、调用工具、生成 Diff、运行验证并汇报结果。项目不再提供独立 Chat 模式。 Plan Mode 面向更复杂或风险更高的工作。当你希望在执行前确认需求、依赖关系、角色、模型、交付物和执行顺序时,应优先使用 Plan。 上下文引用:输入 @ 选择文件,或使用 @codebase、@git、@terminal、@symbols、@web 添加特殊上下文。 内联编辑:选中代码后按 Ctrl+K,无需离开编辑器即可描述修改要求。 代码库索引 打开设置 → Index 选项卡,选择 Embedding 提供商(推荐 Jina AI),配置 API Key 后开始索引。索引完成后 AI 可使用语义搜索。 使用 Plan Mode 需求确认:描述目标并回答必要的澄清问题,Adnify 会整理出包含范围与验收标准的结构化需求。 计划审查:检查任务图、依赖关系、预期产物、并发策略以及每个任务的角色/模型配置;结构检查会在执行前暴露不安全的计划。 执行中心:批准计划后,在实时 TaskBoard 中跟踪各个隔离任务线程;按需处理工具审批或暂停/恢复执行。 结果验收:检查汇总结果及失败任务状态,确认完成或要求继续调整。 ⚡ Skills 系统使用 Skills 是让 AI 获得特定领域(如特定框架优化、复杂测试编写等)专业能力的指令包。 浏览与安装: 打开设置 → Skills 选项卡。 搜索市场: 点击"搜索市场",在 skills.sh 寻找社区贡献的技能。 GitHub 安装: 输入包含 SKILL.md 的 GitHub 仓库地址直接克隆。 手动创建: 为当前项目创建专属技能,编辑生成的 SKILL.md 即可。 使用已有本地 Skill: 在设置页打开项目或全局 Skills 目录,将已有 Skill 文件夹放入后刷新 Skills 列表即可识别。 生效方式: 启用的技能会自动注入 AI 提示词(System Prompt)。 当任务触及技能相关领域时,AI 将自动遵循技能包中的专家指令。 管理: 你可以随时在设置中启用/禁用特定技能,或点击"文件夹"图标直接编辑技能源码。 可识别的本地 Skill 采用独立目录组织,目录内包含 SKILL.md,并可附带 scripts/、templates/、data/ 等辅助文件。 ⌨️ 快捷键 类别快捷键功能通用Ctrl + P快速打开文件 Ctrl + Shift + P / F1命令面板 Ctrl + ,打开设置 Ctrl + L切换 AI 面板 Ctrl + 反引号切换终端 Ctrl + Shift + D切换调试面板编辑器Ctrl + S保存文件 Ctrl + K内联 AI 编辑 Ctrl + W关闭当前文件 F12编辑器聚焦时跳转到定义搜索Ctrl + F文件内搜索 Ctrl + Shift + F全局搜索AIEnter发送指令 Shift + Enter换行 @引用上下文 /斜杠命令调试F5启动调试 F9切换断点工作模式:Agent ?(直接执行)/ Plan ?(审查与编排) ? 项目结构 adnify/ ├── resources/ # 图标资源 ├── scripts/ # 构建脚本 ├── src/ │ ├── main/ # Electron 主进程 │ │ ├── ipc/ # IPC 通信统一安全拦截层 │ │ ├── lsp/ # LSP 服务网关及生命周期治理 │ │ ├── memory/ # AI 记忆池及长期/短期上下文缓存引擎 │ │ ├── security/ # 沙盒越权拦截验证、多模态命令执行防御网 │ │ ├── indexing/ # 按工作区隔离的索引服务进程(解析、Embedding、LanceDB) │ │ └── services/ # 核心总栈子系统 │ │ ├── agent/ # 辅控层:Agent 日志分析与拦截纠错处理 │ │ ├── debugger/# Node、VSCode 协议层深度调试模块 │ │ ├── llm/ # LLM 动态桥接分发网关 (请求构造、配置解析及跨模型流式代理) │ │ ├── mcp/ # Model Context Protocol 后端服务挂载注册及鉴权授权模块 │ │ └── updater/ # 高可控自动静默静默更新探测与热切换模块 │ ├── renderer/ # 前端渲染进程 │ │ ├── agent/ # 客户端 AI 大脑核心驱动 (涵盖引擎队列、Tools执行及指令流) │ │ ├── components/ # 完全解耦聚合化复用UI组件块 │ │ │ ├── editor/ # 编辑器组件 │ │ │ ├── sidebar/ ...(内容过长,已截断,更多详情请访问项目地址) ## ⬇️ 下载地址 ## {cloud type="default" title="网盘下载" url="https://gitee.com/adnaan/adnify/repository/archive/master.zip"} -
hippo4j {card-default label="? 项目信息"} ? 项目名称:hippo4j ? 开发语言:Java ⭐ Star数:1909 | ? Fork数:615 ? 开源协议:Apache-2.0 ? 项目地址:https://gitee.com/opengoofy/hippo4j {/card-default} 项目介绍 ? 异步线程池框架,支持线程池动态变更&监控&报警,无需修改代码轻松引入。 项目详情 动态可观测线程池,提高系统运行保障能力 License Build Status ! ! ! star Docker Pulls codecov EN doc ? 新项目 Ragent AI(点击跳转) —— 企业级 Agentic RAG 项目,拿个 offer 社群在 AI 领域的首个开源作品。架构设计、代码实现保持一贯的高标准,适合写进校招/社招简历。毕竟现在哪家公司不关注 AI? 线程池痛点 线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发以及大批量的任务处理场景,线程池的使用是必不可少的。 如果有在项目中实际使用线程池,相信你可能会遇到以下痛点: 线程池随便定义,线程资源过多,造成服务器高负载。 线程池参数不易评估,随着业务的并发提升,业务面临出现故障的风险。 线程池任务执行时间超过平均执行周期,开发人员无法感知。 线程池任务堆积,触发拒绝策略,影响既有业务正常运行。 当业务出现超时、熔断等问题时,因为没有监控,无法确定是不是线程池引起。 原生线程池不支持运行时变量的传递,比如 MDC 上下文遇到线程池就 GG。 无法执行优雅关闭,当项目关闭时,大量正在运行的线程池任务被丢弃。 线程池运行中,任务执行停止,怀疑发生死锁或执行耗时操作,但是无从下手。 什么是 Hippo4j 提供以下功能支持: 全局管控 - 管理应用线程池实例。 动态变更 - 应用运行时动态变更线程池参数,包括但不限于:核心、最大线程数、阻塞队列容量、拒绝策略等。 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长。 数据采集 - 支持多种方式采集线程池数据,包括但不限于:日志、内置采集、Prometheus、InfluxDB、ElasticSearch 等。 运行监控 - 实时查看线程池运行时数据,自定义时间内线程池运行数据图表展示。 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务。 多种模式 - 内置两种使用模式:依赖配置中心 和 无中间件依赖。 容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更。 框架适配 - Dubbo、Hystrix、RabbitMQ、RocketMQ 等消费线程池运行时数据查看和线程数变更。 变更审核 - 提供多种用户角色,普通用户变更线程池参数需要 Admin 用户审核方可生效。 动态化插件 - 内置多种线程池插件,支持用户自定义插件以及运行时扩展。 多版本适配 - 经过实际测试,已支持客户端 SpringBoot 1.5.x => 2.7.5 版本(更高版本未测试)。 架构设计 项目截图 快速开始 对于本地演示目的,请参阅 Quick start 演示环境: http://console.hippo4j.cn/index.html 接入登记 更多接入的公司,欢迎在 登记地址 登记,登记仅仅为了产品推广。 联系我 开源不易,右上角点个 Star 鼓励一下吧! 如果大家想要实时关注 Hippo4j 更新的文章以及分享的干货的话,可以关注我的公众号。 使用过程中有任何问题,或者对项目有什么建议,关注公众号回复:加群,和 1000+ 志同道合的朋友交流讨论。 项目截图 深入原理 如果您公司没有使用 Hippo4j 场景的话,我也建议去阅读下项目的底层原理,主要有以下几个原因: 为了提高代码质量以及后续的扩展行为,运用多种设计模式实现高内聚、低耦合。 框架底层依赖 Spring 框架运行,并在源码中大量使用 Spring 相关功能。 运用 JUC 并发包下多种工具保障多线程运行安全,通过实际场景理解并发编程。 借鉴主流开源框架 Nacos、Eureka 实现轻量级配置中心和注册中心功能。 自定义 RPC 框架实现,封装 Netty 完成客户端/服务端网络通信优化。 通过 CheckStyle、Spotless 等插件规范代码编写,保障高质量代码行为和代码样式。 友情链接 [[ Sa-Token ]](https://github.com/dromara/sa-token):一个轻量级 java 权限认证框架,让鉴权变得简单、优雅! [[ HertzBeat ]](https://github.com/dromara/hertzbeat):易用友好的云监控系统, 无需 Agent, 强大自定义监控能力。 [[ JavaGuide ]](https://github.com/Snailclimb/JavaGuide):一份涵盖大部分 Java 程序员所需要掌握的核心知识。 [[ toBeBetterJavaer ]](https://github.com/itwanger/toBeBetterJavaer):一份通俗易懂、风趣幽默的 Java 学习指南。 [[ Jpom ]](https://gitee.com/dromara/Jpom):简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。 [[ 12306 ]](https://gitee.com/nageoffer/12306):完成高仿 12306 用户+抢票+订单+支付服务,帮助学生主打就业的项目。 [[ CongoMall ]](https://gitee.com/nageoffer/congomall):企业级商城,基于 DDD 领域驱动模型开发,包含商城业务和基础架构。 贡献者 感谢所有为项目作出贡献的开发者。如果有意贡献,参考 good first issue。 鸣谢 Hippo4j 社区收到 Jetbrains 多份 Licenses,并已分配项目 活跃开发者,非常感谢 Jetbrains 对开源社区的支持。 JetBrains Logo (Main) logo ⬇️ 下载地址 {cloud type="default" title="网盘下载" url="https://gitee.com/opengoofy/hippo4j/repository/archive/master.zip"} 下载后请先检查文件完整性,如有问题请在评论区反馈 -
hertzbeat {card-default label="? 项目信息"} ? 项目名称:hertzbeat ? 开发语言:Java ⭐ Star数:3366 | ? Fork数:1008 ? 开源协议:Apache-2.0 ? 项目地址:https://gitee.com/hertzbeat/hertzbeat {/card-default} 项目介绍 Apache HertzBeat™ 是 AI 驱动的下一代开源实时观测系统。指标日志统一收集,告警一站分发,智能管控分析。无需 Agent,高性能集群,提供强大的自定义监控和状态页构建能力。 项目详情 项目截图 Readme: English | 中文 | 日本語 Discord Reddit Twitter OpenSSF Best Practices codecov Docker Pulls Artifact Hub YouTube Channel Subscribers Contribute with Gitpod 官网: hertzbeat.apache.org 邮件: 发送至 dev-subscribe@hertzbeat.apache.org 订阅邮件列表 ? 介绍 Apache HertzBeat™ 是 AI 驱动的下一代开源实时观测系统。指标日志统一收集,告警一站分发,智能管控分析。无需 Agent,高性能集群,提供强大的自定义监控和状态页构建能力。 特点 集采集+分析+告警+通知为一体,HertzBeat AI 驱动下的新交互与功能,也内置 MCP Server 对外能力。 统一的指标平台,无需 Agent,兼容 Prometheus,支持应用服务,程序,数据库,缓存,操作系统,大数据,中间件,Web 服务器,云原生,网络,自定义等。 统一的日志平台,通过 OTLP 协议多日志源无缝对接上报。 统一的告警平台,内部告警与外部多种告警源集成接入,统一告警处理分析,灵活的实时与周期阈值规则,分组收敛,静默,抑制等。 统一的消息分发,告警平台处理后通过 邮件 Discord Slack Telegram 钉钉 微信 飞书 短信 Webhook Server酱 等方式分发通知。 将 Http, Jmx, Ssh, Snmp, Jdbc, Prometheus 等协议规范可配置化,只需配置模板 YML 就能自定义采集指标。您相信只需简单配置即可快速适配一款 K8s 或 Docker 等新的监控类型吗? 高性能,支持多采集器集群横向扩展,支持多隔离网络监控,云边协同。 提供强大的状态页构建能力,轻松向用户传达您产品服务的实时状态。 HertzBeat的统一平台,AI智能,强大自定义,多类型支持,高性能,易扩展,希望能帮助用户快速方便实现观测需求。? 模块 hertzBeat ⛄ 已支持 我们将监控采集类型(mysql,jvm,k8s)都定义为 yml 模板,用户可以导入这些模板来支持对应类型的监控! 欢迎大家一起贡献你使用过程中自定义的通用指标模板。 Website, Port Telnet, Http Api, Ping Connect, Jvm, SiteMap, Ssl Certificate, SpringBoot2, FTP Server, SpringBoot3, Udp Port, Dns, Pop3, Ntp, Api Code, Smtp, Nginx Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, DM, OpenGauss, ClickHouse, IoTDB, Redis Cluster, Redis Sentinel Doris BE, Doris FE, Memcached, NebulaGraph Linux, Ubuntu, CentOS, Windows, EulerOS, Fedora CoreOS, OpenSUSE, Rocky Linux, Red Hat, FreeBSD, AlmaLinux, Debian Linux Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ, Spring Gateway, EMQX MQTT, AirFlow, Hive, Spark, Hadoop Kubernetes, Docker CiscoSwitch, HpeSwitch, HuaweiSwitch, TpLinkSwitch, H3cSwitch 和更多自定义指标模板。 通知支持 Discord Slack Telegram 邮件 钉钉 微信 飞书 短信 Webhook Server酱。 ? 快速开始 如果您是想将 HertzBeat 部署到内网环境搭建监控系统,请参考下面的部署文档进行操作。 ? HertzBeat 安装 HertzBeat 支持通过源码安装启动,Docker 容器运行和安装包方式安装部署,CPU 架构支持 x86/arm64。方式一:Docker 方式快速安装 docker 环境仅需一条命令即可开始 docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat 浏览器访问 http://localhost:1157 即可开始,默认账号密码 admin/hertzbeat 部署采集器集群(可选) docker run -d -e IDENTITY=custom-collector-name -e MANAGER_HOST=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector -e IDENTITY=custom-collector-name : 配置此采集器的唯一性标识符名称,多个采集器名称不能相同,建议自定义英文名称。 - `-e MODE=public` : 配置运行模式(public or private), 公共集群模式或私有云边模式。 - `-e MANAGER_HOST=127.0.0.1` : 配置连接主 HertzBeat 服务的对外 IP。 - `-e MANAGER_PORT=1158` : 配置连接主 HertzBeat 服务的对外端口,默认1158。 更多配置详细步骤参考 通过 Docker 方式安装 HertzBeat 方式二:通过安装包安装 下载您系统环境对应的安装包 hertzbeat-xx.tar.gz Download 配置 HertzBeat 的配置文件 hertzbeat/config/application.yml (可选) 部署启动 $ ./bin/startup.sh 或 bin/startup.bat 浏览器访问 http://localhost:1157 即可开始,默认账号密码 admin/hertzbeat 部署采集器集群(可选) 下载采集器安装包 hertzbeat-collector-xx.tar.gz 到规划的另一台部署主机上 Download 配置采集器的配置文件 hertzbeat-collector/config/application.yml 里面的连接主 HertzBeat 服务的对外 IP,端口,当前采集器名称(需保证唯一性)等参数 identity mode (public or private) manager-host manager-port collector: dispatch: entrance: netty: enabled: true identity: ${IDENTITY:} mode: ${MODE:public} manager-host: ${MANAGER_HOST:127.0.0.1} manager-port: ${MANAGER_PORT:1158} 启动 $ ./bin/startup.sh 或 bin/startup.bat 浏览器访问主 HertzBeat 服务 http://localhost:1157 查看概览页面即可看到注册上来的新采集器 更多配置详细步骤参考 通过安装包安装HertzBeat 方式三:本地代码启动 此为前后端分离项目,本地代码调试需要分别启动后端工程 hertzbeat-startup 和前端工程 web-app 后端:需要 maven3+, java17 和 lombok 环境,修改 YML 配置信息,添加JVM参数--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED后启动 hertzbeat-startup 服务即可。 前端:需要 nodejs npm angular-cli环境,待本地后端启动后,在 web-app 目录下启动 ng serve --open 浏览器访问 http://localhost:4200 即可开始,默认账号密码 admin/hertzbeat 详细步骤参考 参与贡献之本地代码启动 方式四:Docker-Compose 统一安装 hertzbeat+postgresql+tsdb 通过 Docker-Compose 部署脚本 一次性把 postgresql/mysql 数据库, victoria-metrics/iotdb/tdengine 时序数据库和 hertzbeat 安装部署。 详细步骤参考 通过 Docker-Compose 安装 HertzBeat 方式五:Kubernetes Helm Charts 部署 hertzbeat+collector+postgresql+tsdb 通过 Helm Chart 一次性将 HertzBeat 集群组件部署到 Kubernetes 集群中。 详细步骤参考 Artifact Hub HAVE FUN ✨ Contributors Thanks these wonderful people, welcome to join us: 贡献者指南 项目截图tomsun28? ? ? 项目截图会编程的王学长? ? ?  ⬇️ 下载地址 {cloud type="default" title="网盘下载" url="https://gitee.com/hertzbeat/hertzbeat/repository/archive/master.zip"} 下载后请先检查文件完整性,如有问题请在评论区反馈 -
ZRouter {card-default label="? 项目信息"} ? 项目名称:ZRouter ? 开发语言:TypeScript ⭐ Star数:186 | ? Fork数:35 ? 开源协议:Apache-2.0 ? 项目地址:https://gitee.com/common-apps/ZRouter {/card-default} 项目介绍 ZRouter是一款轻量级且非侵入性的鸿蒙动态路由框架,可解决HAR/HSP业务模块间的耦合与通信问题,提供了自定义拦截器、服务路由、转场动画、生命周期函数管理、NavDestination模板化等功能。 项目详情 介绍 ZRouter是一款轻量级且非侵入性的鸿蒙动态路由框架,可解决HAR/HSP业务模块间的耦合与通信问题。主要特性: 简化Navigation使用,无需关注路由表的配置,对Navigation及NavDestination组件保持零侵入; 支持API链式调用,让API更简洁直观; 为了进一步简化使用,支持NavDestination页面模板化,是一个可选项; 注解参数支持使用静态常量,可跨模块定义; 支持自定义拦截器,可实现页面重定向、登录验证、数据预取、埋点等业务场景。 支持服务路由,可实现Har/Hsp模块间的通信; 支持全局及单个页面的生命周期函数管理,可使任意类都能享有与组件相同的生命周期特性,可用于页面埋点统计等业务场景; 支持跨多级页面参数携带返回监听; 支持自定义URL路径跳转,可在拦截器内自行解析URL实现业务逻辑; 内置多种转场动画效果(平移、旋转、渐变、缩放、高斯模糊、共享一镜到底动画),并支持自定义动画; 支持启动模式、混淆、嵌套Navigation、Hap、元服务; 支持与您现有项目中的Navigation无缝融合,实现零成本向本库迁移; 支持ArkUI-X跨平台上使用; 支持第三方应用Navigation的使用本库API; 使用十分简单,没有繁琐的配置,两行代码就可以完成页面的跳转,如下: WX20250805 102507 ZRouter已上架录入到华为鸿蒙生态伙伴组件专区 使用收集 为了持续优化鸿蒙ZRouter路由库,恳请您花一点时间填写下应用名称。您的每一次反馈,都是我们持续改进的重要动力。 https://wj.qq.com/s2/25201566/76c1/ 快速入门 ZRouter快速入门 router-register-plugin编译插件 — 很重要 下载安装 在项目根目录的hvigor目录下的hvigor-config.json5文件中配置安装 pEovcrt.png "dependencies": { "router-register-plugin":"x.x.x" },编译插件最新版本: Static Badge npm 最后记得Sync Now或重新build让插件安装生效。 或者使用hvigorw命令行工具执行任一命令,命令行工具会自动执行安装构建依赖。 hvigorw --sync配置 支持两种配置方式: 工程级配置: 即在工程根目录下的hvigorfile.ts文件中全局配置; 模块级配置:即在每个模块目录下的hvigorfile.ts文件中单独配置; 不建议一个项目同时使用两种配置方式,虽然是这种混合方式也是支持的,但容易出现配置冲突。模块级配置相对繁琐些,但配置项会更精细化些。步骤: // 1、导入 import { routerRegisterPlugin, OptionalPluginConfig } from 'router-register-plugin' // 2、初始化配置 const config: OptionalPluginConfig = { scanDirs: ['src/main/ets/pages', 'src/main/ets/views'], // 扫描的目录,如果不设置,默认是扫描src/main/ets目录 logEnabled: true, // 查看日志 viewNodeInfo: false, // 查看节点信息 ignoredModules:['RouterApi','common','xxx'], // 忽略的参与构建的模块,根据自己项目自行设置 enableUiPreviewBuild: false, // 启用UI预览构建,不建议启动 } export default { // 3、添加插件 plugins:[routerRegisterPlugin(config)] } 注意:hvigorfile.ts文件中默认配置不要删除了。配置参数说明: 参数名类型默认值描述scanDirsstring[]['src/main/ets']扫描的目录,如果不设置,默认是扫描src/main/ets目录。建议配置该字段,避免扫描所有目录,影响工程编译效率** logEnabledbooleantrue是否打印日志 viewNodeInfobooleanfalse查看节点信息,只有与logEnable同时为true才会打印输出isAutoDeleteHistoryFilesbooleanfalse是否在构建时删除编译产物,已弃用,在项目clean自动删除无用编译产物,请不要设置此参数。 lifecycleObserverAttributeNamestringlifecycleObserver如果使用了NavDest页面模板化功能,该配置字段会生效,默认属性名是lifecycleObserver,也可以在@Route注解上单独设置这个属性ignoredModulesstring[][]忽略需要扫描的模块,填写模块名称,默认是全部模块;插件在工程级时使用,该字段才会生效。建议配置该字段,避免扫描所有模块,影响工程编译效率enableUiPreviewBuildbooleanfalse是否在ui预览构建时生成,默认不启用, 会降低ui预览构建效率注意: 以上配置参数都是可选的,建议配置scanDirs和ignoredModules字段,避免扫描所有目录和模块,影响工程编译效率。编译阶段会自动生成一些文件,建议在git的.gitignore忽略掉这些文件。 _generated **/route_map.json **/router_map.jsonZRouter的基本使用 下载安装 在每个har/hsp模块中,通过ohpm工具下载安装库: ohpm install @hzw/zrouter页面跳转 新建三个模块分别是harA、harB、hspC,三者之间没有依赖关系,entry模块依赖了这三个模块,通过ZRouter可以在四个模块间相互跳转,从而达到模块解耦效果。模块关系图如下图: ohos zrouter 1 1、在EntryAbility的onCreate()方法中初始化ZRouter,建议使用initialize()方法进行初始化,init()方法已弃用 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { // 如果项目中存在hsp模块则传入true ZRouter.initialize((config) => { config.isLoggingEnabled = BuildProfile.DEBUG config.isHSPModuleDependent = true }) } 建议在AbilityStage的onCreate()方法中完成初始化 export class AppAbilityStage extends AbilityStage{ onCreate(): void { // 应用HAP首次加载时触发,可以在此执行该Module的初始化操作(例如资源预加载、线程创建等)。 // 在module.json5配置文件中,通过配置 srcEntry 参数来指定模块对应的代码路径,以作为HAP加载的入口。 // 初始化路由 ZRouter.initialize((config) => { // 设置context config.context = this.context config.isLoggingEnabled = BuildProfile.DEBUG config.isHSPModuleDependent = true // 服务路由初始化配置,如果没有使用服务路由,可不设置 config.loadDynamicModule = ['@hzw/hara', 'harb', 'hspc'] config.onDynamicLoadComplete = () => { console.log("已完成所有模块的加载") } }) } }2、在Index页面使用Navigation作为根视图,通过ZRouter的getNavStack()方法获取NavPathStack实例,将其传入到Navigation的构造函数中。 如果在Index入口文件中启动Splash页面,建议放在Navigation的onAppear方法中进行启动,或者组件的onPageShow方法,具体可参考demo // Index 中使用 aboutToAppear 生命周期函数会因为 Navigation 还没初始化完成导致无法有效跳转,可使用替换成 onPageShow @Entry @Component struct Index { build() { // 获取NavPathStack实例对象 Navigation(ZRouter.getNavStack()){ Column({space:12}){ Button('toHarAMainPage').onClick((event: ClickEvent) => { // 跳转页面 ZRouter.push("harAMainPage") }) } } .title('Main') .height('100%') .width('100%') .onAppear(() => { // 启动Splash页面 ZRouter.push("SplashPage") }) } }通过ZRouter的pushXX()方法进行页面跳转,参数是@Route装饰器上的name属性值;或者用ZRouter的getNavStack()方法来执行页面跳转。 3、在NavDestination子页的使用自定义@Route或@ZRoute注解标注页面,其中name属性是必填的,页面跳转需要用到name值,还有另外三个可选属性分别是: description:页面描述,没有功能作用; needLogin:如果页面需要登录,可以将值设置为true,然后在拦截器中做页面重定向到登录页; extra:额外的值可以通过该属性设置 @Route/@Service/@ZAttribute/@ZLifecycle等自定义注解上的name属性支持使用静态常量,在后面文档有详细介绍代码如下: @Route({ name: 'hspCPage1', needLogin:true ,extra: 'hsp'}) @Component export struct Page1 { @State message: string = 'Hello World'; build() { NavDestination(){ Column({space:12}){ Button('toHarAPage1').onClick((event: ClickEvent) => { ZRouter.push("harAPage1") }) } } .title('hspCPage1') .width('100%') .height('100%') } } 如果觉得每个页面都要用NavDestination组件包裹太麻烦,可以使用NavDestination模板化功能。建议通过ZRouter.getInstance()方式来操作路由的跳转与关闭,使用会更灵活简洁,之前的ZRouter的静态方法依然保留着,在1.2.0版本起将标记为过期状态了。 ZRouter.getInstance() .setParam("root data") .setLunchMode(LaunchMode.STANDARD) // 启动模式 .setAnimate(true) .setPopListener((r) => { LogUtil.log("index result: ", r.data ," from: ", r.from); }) .navigation("harAPage3")全局拦截器 全局拦截器每个页面跳转都会触发,可以拦截器中做页面跳转的拦截,比如跳转前拦截、数据预取、登录拦截,404拦截、埋点、自定义URL路径等等。 代码示例: export class GlobalNavigateInterceptor implements IGlobalNavigateInterceptor{ static count = 0 onNavigateBefore: (destInfo: DestinationInfo) => Promise = (destInfo) => { console.log("IInterceptor Global onNavigateBefore -> ", destInfo.name) return new Promise((resolve, _) => { if (destInfo.name === RouterConstants.PAGE_BEFORE_PUSH) { // 拦截跳转到ParamPage页面 if (GlobalNavigateInterceptor.count === 0) { destInfo.param = ' 在拦截器onNavigateBefore中已替换参数 ' destInfo.next() // 继续跳转 默认的 ,可以不写 } else if (GlobalNavigateInterceptor.count === 1) { ToastUtils.show("拦截器onNavigateBefore中已拦截, 再点一次会继续执行") destInfo.block() // 拦截跳转 } else if (GlobalNavigateInterceptor.count === 2) { destInfo.name = RouterConstants.LIFECYCLE_CASE_VIEW } GlobalNavigateInterceptor.count += 1 } resolve(destInfo) }) } onRootWillShow: ((fromContext: NavDestinationContext) => void) | undefined = (fromContext) => { console.log("IInterceptor Global onRootWillShow: ", fromContext.pathInfo.name) } onPageWillShow: ((fromContext: NavDestinationContext, toContext: NavDestinationContext) => void) | undefined = (from ,to)=>{ console.log("IInterceptor Global onPageWillShow: ", from, to.pathInfo.name, to.pathInfo.param) } onNavigate: ((context: InterceptorInfo) => void) | undefined = (info)=>{ if (info.notRegistered) return console.log("IInterceptor Global onNavigate -> ", info.name) let isLogin = AppStorage.get("isLogin") if (info.isNeedLogin && !isLogin) { let param = info.param ZRouter.getInstance() .setParam(param) .setAnimate(true) .setPopListener((result) => { if (result.data) { // 登录成功 promptAction.showToast({ message: `登录成功` }) return true // 返回true 则继续跳转登录前的页面 } else { return false } }) .redirect("LoginPage", RedirectType.REPLACE) } } } // 添加拦截器 ZRouter.setGlobalInterceptor(new GlobalNavigateInterceptor()) 当页面未注册时,可以通过以下方式处理: 跳转到404页面:使用 redirect() 方法直接重定向到404页面 跳转到登录页面:使用 redirect() 方法跳转到登录页,并可以设置回调函数处理登录结果 登录setPopListener的回调函数工作流程: 登录成功时,回调函数返回 true,继续跳转到原来的目标页面 登录失败或取消时,回调函数返回 false,停止跳转 登录页面代码示例: @Route({ name: 'LoginPage'}) @Component export struct LoginPage{ build() { NavDestination(){ Column({space:15}){ Button('登录成功').onClick((event: ClickEvent) => { // 模拟登录 AppStorage.setOrCreate('isLogin', true) ZRouter.finishWithResult(true) }) } .width('100%') .height('100%') } .width('100%') .height('100%') .title('LoginPage') } }在登录成功后通过ZRouter.finishWithResult()方法携带数据关闭页面,内部会将状态传递给redirectForResult2()方法中的回调函数,最终在setPopListener中接收处理。 NavDestination页面模板化 在介绍基本使用的流程中,我们知道每个页面都需要通过NavDestination来包裹,这样会造成代码的冗余,因此可通过ZRouter的模板化能力将NavDestination层去除。 具体使用见详细文档 自定义URL路径跳转 在项目中一般会设计一套统一的URL路径跳转规范,通过URL路径跳转到不同原生页面。比如下面的URL路径: hzw://hello?id=69&name=harAPage3获取URL路径上的name参数进行跳转原生页面,可以设置一个拦截器来拦截URL路径跳转。代码示例: 跳转: Button('https://www.baidu.com?id=66&name=hspCIndex').onClick((event: ClickEvent) => { ZRouter.getInstance() .navigation("https://www.baidu.com?id=66&name=hspCIndex") }) Button('hzw://hello?id=69&name=harAPage3').onClick((event: ClickEvent) => { ZRouter.getInstance() .navigation("hzw://hello?id=69&name=harAPage3") })拦截器: export class UrlInterceptor implements IInterceptor { // 设置拦截器优先级,数值越大则优先执行 priority: number = 10000; process: (context: InterceptorInfo) => InterceptorInfoOrNull = (context) => { console.log("IInterceptor process: ", this.priority , context.name) // 自定义URL路径是没有注册的 if (context.notRegistered) { // 如果是URL路径跳转 if (this.isLink(context.name)) { // 拦截到URL路径跳转,进行处理 const map = this.parseQueryString(context.name) const name = map.get('name') if (name) { // 跳转原生页面 ZRouter.getInstance() .setParam(map.get("id")) .navigation(name) } } else { ZRouter.getInstance().redirect("PageNotFound2") } return null // 返回null则拦截掉 } return context }; isLink(str: string): boolean { const linkRegex = /^(hzw:\/\/|http:\/\/|https:\/\/|www\.).+/; return linkRegex.test(str); } parseQueryString(queryString: string) { let params = new HashMap(); let queryStringWithoutQuestionMark = queryString.split('?')[1]; if (queryStringWithoutQuestionMark) { let keyValues = queryStringWithoutQuestionMark.split('&'); keyValues.forEach((keyValue) => { let pair = keyValue.split('='); let key = decodeURIComponent(pair[0]); let value = decodeURIComponent(pair[1]); params.set(key, value) }) } return params; } }上面的逻辑也可以放在全局拦截器的onNavigateBefore()方法中处理。 注解上使用静态常量,可跨模块定义 router-register-plugin插件1.0.7版本起,@Route与@Service注解的name属性可使用静态常量,方便统一管理路由名称;静态常量支持当前模块或跨模块定义,常量的定义模版如下: export class RouterConstants { public static readonly URL_TEST_PAGE: string = "url_test"; public static readonly HARA_MAIN_PAGE :string = "harAMainPage" }如果路由常量在一个公共模块定义,建议在模块的Index.ets文件导出,另外RouterConstants的文件必须是.ets后缀,不支持ts后缀文件。具体可参考案例服务路由-模块间通信 服务路由主要用于实现模块之间的通信,模块间是相互独立且不直接依赖于彼此。 1.0.9版本开始支持,具体使用可见详情文档 或者参考demo生命周期函数管理 ZRouter的组件生命周期管理能力,主要有两个特点: 不影响你原有的生命周期业务逻辑,对NavDestination页面保持着零侵入性,整合了组件通用生命周期函数和NavDestination生命周期函数 可以让任何一个类具备有与组件的生命周期能力; 具体使用见详细文档 路由转场动画 从1.1.1版本起内置了转场动画(平移、旋转、渐变、缩放、高斯模糊),也支持自定义转场动画;具体使用见详细文档 第三方Navigation实例使用本库的API 如果第三方Navigation实例使用本库的API,需要将第三方Navigation的NavPathStack实例注册到ZRouter中,代码示例: aboutToAppear(): void { // 在合适的时机注册导航栈 // let s = ZRouter.getNavStackByName(NAV_STACK_NAME) ZRouter.registerNavStack(NAV_STACK_NAME, this.stack) } aboutToDisappear(): void { ZRouter.unregisterNavStack(NAV_STACK_NAME) } 上面是模拟代码,具体注册的时机需要根据实际情况来定。NAV_STACK_NAME是一个自定义常量,用于标识导航栈的名称。 页面跳转: Column({ space: 15 }) { Text(this.msg) Button("harAMainPage").onClick((event: ClickEvent) => { ZRouter.getInstance(NAV_STACK_NAME) .setAnimate(true) .setPopListener((v) => { this.msg = v.data?.toString() + ' ' + v.from?.toString() }) .navigation("harAMainPage") }) }把标识导航栈的名称NAV_STACK_NAME,入参到ZRouter.getInstance()方法中,就可使用ZRouter的API。 在ArkUI-X项目上的使用 router-register插件在ArkUI-X项目的配置有所不同,需要使用者自己手动修改下hvigorfile.ts文件,详细见ArkuiX-ZRouter,或者issues IB35F5 混淆 生产环境需要在每个模块的obfuscation-rules.txt文件添加混淆配置: -keep-file-name Index _generated ZR*工作原理 路由注册流程代码是由插件在编译阶段自动化生成,其原理是不难的,通过Hvigor插件扫描指定目录的ets文件,递归解析ets文件的语法树节点,查找解析注解上的参数,然后将这些信息通过模板引擎生成对应的代码逻辑。 与Java注解处理器原理是类似的ZRouter库是对NavPathStack对进行高度封装的,包括了页面跳转、自定义拦截器、服务路由、生命周期回调、转场动画、NavDestination模板化等功能,提供了更简洁易用的API,其中部分思想参考了Android ARouter路由框架。 编译插件的基本流程图: WX20250805 103406 接口列表 查看详细文档 FQA 查看详细文档 源码 gitee:https://gitee.com/common-apps/ZRouter github:https://github.com/751496032/ZRouter 参与贡献 Fork 本仓库 新建分支 提交代码 新建 Pull Request 待优化项 服务路由:支持在entry模块动态注册; 拦截器: onNavigateBefore()兼容系统push 等api拦截; onNavigateBefore()支持获取注解中的参数; 页面模板化:在模板化下支持页面路由组件直接参数携带,非模板功能已支持了; * ...(内容过长,已截断,更多详情请访问项目地址) ⬇️ 下载地址 {cloud type="default" title="网盘下载" url="https://gitee.com/common-apps/ZRouter/repository/archive/master.zip"} 下载后请先检查文件完整性,如有问题请在评论区反馈 -
Tenon {card-default label="? 项目信息"} ? 项目名称:Tenon ? 开发语言:C ⭐ Star数:119 | ? Fork数:33 ? 开源协议:Apache-2.0 ? 项目地址:https://gitee.com/tenonos/tenon {/card-default} 项目介绍 基于libos架构的操作系统核心库及构建工具 项目详情 Static Version Badge Static License Badge Static Language Badge TenonOS:简化复杂性,释放创新力,重塑操作系统的开发模式 TenonOS是一款基于LibOS架构的操作系统,旨在提升操作系统扩展、裁剪、移植效率,基于丰富的微库组件池,实现跨场景、跨行业、跨领域的快速能力复用,灵活生成与场景最契合的OS实体。 架构 与传统宏内核、微内核架构的操作系统不同,Tenon采用微库解耦架构,借鉴Unikraft的实现方式,将kernel、驱动、服务进一步拆分封装成接口解耦、功能独立的微库,使用Kconfig进行微库配置和依赖关系管理。Tenon不约束操作系统或内核必须由哪些部件组成,用户可以根据自己的需求选择TenonOS社区或UK社区提供的微库,甚至可以基于框架提供的API封装实现自己的调度器、内存分配器、线程池、同步锁、特定系统调用等微库,达到任意裁剪、新增、优化操作系统功能的目的,使软硬件性能、资源利用率达到极致。 目前Tenon的构建代码和基础框架使用Unikraft V0.16.0版本作为基线,并增加以下平台和主要特性: 支持的平台 平台CPU架构启动协议状态树莓派arm64Linux 64-bit boot protocol已支持rk3568arm64Linux 64-bit boot protocol已支持kvmarm64Linux 64-bit boot protocol已支持d9arm64Linux 64-bit boot protocol已支持关键特性 [x] 支持嵌入式平台:plat-raspi、plat-rk3568 [x] posix接口兼容 -- 持续更新 [x] 调试工具:openocd+gdb [x] 调试工具:NS8250串口驱动 [x] 实时微库:支持抢占式调度 [x] 实时微库:支持中断抢占、中断嵌套 [x] 同步微库:支持自旋锁、互斥锁、信号量、消息队列 [x] 支持虚拟文件系统 [x] 网络微库:netdev框架 [ ] SMP:支持多核启动和跨核调度 [ ] 网络微库:rk3568网卡驱动 示例应用 helloworld rtos-benchmark 对象识别 busybox 如何使用 代码结构 除Tenon框架API和核心微库外,TenonOS社区主仓还提供了用于编译构建的板级支持包仓库、以app为前缀的应用仓库、以lib为前缀的外部微库、以driver为前缀的外部驱动微库、以plat为前缀的外部平台仓库。这些微库会在后续逐步开源。构建时工作目录结构如下 . ├── apps /*此目录用于维护运行在os之上的app,下为示例*/ │ ├── app-busybox │ ├── app-elfloader │ ├── app-helloworld │ ├── app-helloworld-cpp │ └── app-tflite ├── board-support-package /*此目录用于维护板级支持包,包括设备树、bootloader等。下为示例*/ │ ├── kvm │ └── raspberry-pi-3b+ ├── drivers /*此目录用于维护外部驱动,“外部”指不在tenon核心仓维护的代码仓*/ ├── libs /*此目录用于维护外部微库,下为示例*/ │ ├── lib-libcxx │ └── lib-tflite-micro ├── plats /*此目录用于维护外部平台,包含对应平台的os初始化代码。下为示例*/ │ ├── plat-raspi │ └── plat-rk3568 └── tenon /*tenon核心仓库,用于维护API框架和内部微库*/ ├── arch /*cpu架构相关代码*/ ├── build /*保存构建出的镜像和中间产物*/ ├── drivers /*用于维护内部驱动*/ ├── include /*跨微库共用的宏定义、结构体定义等*/ ├── lib /*用于维护框架微库和内部微库*/ ├── plat /*用于维护内部平台,如kvm*/ └── support /*编译构建脚本*/使用指导 Tenon使用make完成编译构建,当前支持kvm、树莓派3b+、rk3568等平台,使用指导请参考quick_start 社区贡献 Tenon欢迎各方以个人、组织、企业形式参与到社区贡献当中,贡献指导请参考Contributing License Tenon采用Apache-2.0开源许可协议。当前代码仓中仍有部分unikraft代码,unikraft采用BSD-3-Clause开源许可协议。当前开发过程中,若要修改uk原有微库的代码,请保留文件中原有LICENSE说明,新增微库或特性请使用Apache-2.0协议。后续开源进程中我们将逐步移除对uk代码的依赖。 参考资源 设计文档 API文档 博客 RequestForComments 微库中心 社区主页 Roadmap ⬇️ 下载地址 {cloud type="default" title="网盘下载" url="https://gitee.com/tenonos/tenon/repository/archive/master.zip"} 下载后请先检查文件完整性,如有问题请在评论区反馈 -
《灵魂受缚》联机版 游戏介绍 受灵魂锁链束缚,化身被锁在一起的敌对军阀,凭借锁链魔法、团队合作,以及一连串糟糕透顶的决定杀出炼狱。绊倒敌人,手滑把队友拖去送死,再从残酷的 Boss 手中活下来——顺便面对多得有点可疑的抖动物理效果。 游戏截图 版本介绍 v1.1.6联机版|容量6.3GB|官方简体中文|支持键盘.鼠标.手柄 Online-Fix 联机说明 Online-Fix 是由俄罗斯团队制作的第三方联机修复资源,主要用于部分游戏的多人联机功能。 使用前请注意 资源具有时效性 Online-Fix 并非永久有效,游戏更新、Steam 更新、联机服务变化等情况,都可能导致原有补丁失效。 注意游戏版本匹配 请尽量使用与当前游戏版本对应的 Online-Fix。联机双方建议保持相同的游戏版本及 Online-Fix 版本,否则可能出现无法联机等问题。 不同游戏使用方式可能不同 部分游戏可能需要特定的启动方式或其他前置条件,请以对应游戏页面的使用说明为准。 遇到无法联机的情况 如果出现无法启动、无法创建或加入房间、搜索不到好友、联机掉线等问题,请优先检查游戏版本、Online-Fix 版本、Steam 状态,以及 Windows 防火墙是否拦截游戏 EXE 启动程序、OnlineFix64.dll、winmm.dll 等相关补丁文件。 游戏更新后可能失效 如果游戏近期进行了版本更新,旧版 Online-Fix 可能无法继续使用。此时建议等待对应版本的 Online-Fix 更新。 ?? 重要提示:Online-Fix 的可用性会受到游戏版本、Steam 平台及网络环境等因素影响。本站无法保证资源 100% 可用或永久有效,请以实际使用情况为准。 ⬇️ 下载地址 下载后请先检查文件完整性,如有问题请在评论区反馈 -
安卓AdGuard拦截v4.14.1高级版 软件介绍 AdGuard最受欢迎的广告拦截程序,堪称去广告大杀器。Adguard安卓版无需ROOT权限,可拦截所有应用和浏览器的广告。具有广告内容拦截跟踪器(包括:广告拦截过滤器、社交过滤器、隐私过滤器、安全过滤器、自定义过滤器)、DNS过滤、HTTPS过滤、节省应用流量数据管理及隐身模式保护个人隐私功能。 软件介绍 HT_20231219112821.jpg 更新日志 adguard.com/zh_cn/versions/android/nightly.html 版本特点 by Balatan 解锁永久订阅版,可正常更新规则 去首次启动欢迎界面快速设置向导 跳过发送改善体验及隐私政策向导 禁用且删除了不必要的权限、服务、接收器、提供器 清理调试代码、不必要资源文件、极限压缩对齐优化 ⬇️ 下载地址 {cloud type="tianyi" title="天翼云盘" url="https://cloud.189.cn/t/q2EjE3EnuyEj(访问码:dap3)"} 下载后请先检查文件完整性,如有问题请在评论区反馈 -
《空之轨迹 the 2nd》中文版 游戏介绍 《空之轨迹 the 2nd》为故事RPG《空之轨迹 the 1st》的正统续作。本作描绘了少女艾丝蒂尔为了寻找在前作结局中突然不见踪影的少年约书亚,踏上全新旅程的故事。 游戏截图 版本介绍 v1.03.1|整合全DLC|容量51.2GB|官方简体中文|支持键盘.鼠标.手柄 **Steam 玩家评价**玩家评价统计 **好评 7.8/10综合评分 Steam 好评率 93.5%· 31 条评价 数据更新于 2026-09-17 整体口碑很好,值得下载体验 好评 29差评 2修正口碑 78.2% ⬇️ 下载地址 下载后请先检查文件完整性,如有问题请在评论区反馈 -
青云AI漫剧制作全流程实操教程 青云AI漫剧实操课是一套面向新手及进阶创作者的AI漫剧制作教程,系统讲解小说与脚本拆分、角色和场景生成、分镜头设计、提示词优化、人物与场景一致性、AI视频生成、配音、字幕、音效、背景音乐、运镜及剪映后期制作。课程包含解说漫、对话漫、真人剧、儿童古诗词、产品宣传片等完整案例,并覆盖豆包、即梦、Seedance 2.0、Sora 2、Vidu、Nano Banana 2、GPT Image 2、RunningHub等常用工具,同时讲解抖音漫剧发布、版权签约和平台入驻流程,帮助学习者掌握从创意到成片发布的完整工作流。 百度:https://pan.baidu.com/s/1PU7gM3YxNXKRPTp6OQl4oA?pwd=cxwn 迅雷:https://pan.xunlei.com/s/VP1eKSwWo0N8fs1qbHyaaz_qA1?pwd=yhs3# 夸克:https://pan.quark.cn/s/ee32172f7288 下载后请先检查文件完整性,如有问题请在评论区反馈 -
《地狱建筑师》v2.2.3中文版 游戏介绍 《地狱建筑师》是一款基地建造沙盒管理类的动作冒险游戏。在游戏中你将扮演地狱的管理者,建设发展自己的地狱,通过自己喜欢的方式进行发展壮大,通过上帝的视角去合理的建设监狱,并监视里面每一个犯人的一举一动。 游戏截图 中文设置 SETTINGS-LANGUAGE-中国人 版本介绍 v2.2.3|容量1.84GB|官方简体中文|支持键盘.鼠标 ⬇️ 下载地址 {cloud type="tianyi" title="天翼云盘" url="https://cloud.189.cn/web/share?code=qimy6fIFnU3a"} 下载后请先检查文件完整性,如有问题请在评论区反馈 -
2023年商业视觉实战班第70期 1.png 课程介绍 商业视觉实战班第70期旨在教授学员商业设计中的视觉内容制作与营销策略。课程涵盖平面设计、品牌形象、包装设计和广告营销等领域,通过案例分析和实际操作,帮助学员掌握提升品牌影响力和营销效果的关键技能。 学习地址 百度:https://pan.baidu.com/s/1rXTpQyZySJxgCUC2inYpbg?pwd=55rm 天翼:https://cloud.189.cn/t/63uy2qvIjIBb(访问码:zg5j) 阿里:https://www.alipan.com/s/wkhsaTgPNXS 夸克:https://pan.quark.cn/s/16ab743ae3ee 下载后请先检查文件完整性,如有问题请在评论区反馈