inngest/inngest

GitHub: inngest/inngest

开源的工作流编排平台,用持久化函数替代传统队列和状态管理,支持多语言 SDK 和自托管。

Stars: 4974 | Forks: 265

# [![Inngest](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7f67f265bb003053.png)](https://www.inngest.com) [![最新版本](https://img.shields.io/github/v/release/inngest/inngest?include_prereleases&sort=semver)](https://github.com/inngest/inngest/releases) [![测试状态](https://img.shields.io/github/actions/workflow/status/inngest/inngest/go.yaml?branch=main&label=tests)](https://github.com/inngest/inngest/actions?query=branch%3Amain) [![Discord](https://img.shields.io/discord/842170679536517141?label=discord)](https://www.inngest.com/discord) [![Twitter 关注](https://img.shields.io/twitter/follow/inngest?style=social)](https://twitter.com/inngest) [Inngest](https://www.inngest.com/?ref=github-inngest-readme) 的持久化函数取代了队列、状态管理和调度,使任何开发者都能在不接触基础设施的情况下,更快地编写可靠的步骤函数。 1. 使用我们的任意 [**语言 SDK**](#sdks) 编写持久化函数 2. 运行 [**Inngest Dev Server**](#getting-started) 以获得具有生产环境一致性的完整本地开发体验。 3. 将您的函数部署到您自己的基础设施 4. 将您的应用程序函数与 [**Inngest Platform**](https://www.inngest.com/?ref=github-inngest-readme) 或 [自托管 Inngest 服务器](#self-hosting) 同步。 5. 每当接收到触发事件时,Inngest 即通过 HTTPS 安全地调用您的函数。 ### 持久化函数示例 Inngest Functions 使开发者能够运行可靠的后台逻辑,从后台任务到复杂的工作流。一个 Inngest Function 由三个关键部分组成,为重试、调度和协调复杂的操作序列提供了强有力的支持: - [**触发器 (Triggers)**](https://www.inngest.com/docs/features/events-triggers?ref=github-inngest-readme) - 触发函数的事件、Cron 调度或 Webhook 事件。 - [**流控制 (Flow Control)**](https://www.inngest.com/docs/guides/flow-control?ref=github-inngest-readme) - 配置函数运行的入队和执行方式,包括并发、节流、防抖、速率限制和优先级。 - [**步骤 (Steps)**](/docs/features/inngest-functions/steps-workflows?ref=github-inngest-readme) - 步骤是 Inngest 的基础构建块,可将您的 Inngest Functions 转化为可靠的工作流,这些工作流可以运行数月并能从故障中恢复。 以下是一个函数示例,它限制了每个唯一用户 ID 的并发性,并执行两个在出错时会重试的步骤: ``` export default inngest.createFunction( { id: "import-product-images", concurrency: { key: "event.data.userId", limit: 10 } }, { event: "shop/product.imported" }, async ({ event, step }) => { // Here goes the business logic // By wrapping code in steps, each will be retried automatically on failure const s3Urls = await step.run("copy-images-to-s3", async () => { return copyAllImagesToS3(event.data.imageURLs); }); // You can include numerous steps in your function await step.run("resize-images", async () => { await resizer.bulk({ urls: s3Urls, quality: 0.9, maxWidth: 1024 }); }) }; ); // Elsewhere in your code (e.g. in your API endpoint): await inngest.send({ name: "shop/product.imported", data: { userId: "01J8G44701QYGE0DH65PZM8DPM", imageURLs: [ "https://useruploads.acme.com/q2345678/1094.jpg", "https://useruploads.acme.com/q2345678/1095.jpg" ], }, }); ``` ## 了解更多 - [入门指南](#getting-started) - [SDK](#sdks) - [项目架构](#project-architecture) - [自托管](#self-hosting) - [社区](#community) ## 入门指南 使用我们的 CLI 运行 Inngest Dev Server: ``` npx inngest-cli@latest dev ``` 在 http://localhost:8288 打开 Inngest Dev Server 仪表板: ![Screenshot of the Inngest dashboard served by the Inngest Dev Server](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/ebd23e3aba003115.png) 请遵循我们的 [Next.js](https://www.inngest.com/docs/getting-started/nextjs-quick-start?ref=github-inngest-readme)、[Node.js](https://www.inngest.com/docs/getting-started/nodejs-quick-start?ref=github-inngest-readme) 或 [Python](https://www.inngest.com/docs/getting-started/python-quick-start?ref=github-inngest-readme) 快速入门指南。 ## SDK - **TypeScript / JavaScript** ([inngest-js](https://github.com/inngest/inngest-js)) - [参考文档](https://www.inngest.com/docs/reference/typescript?ref=github-inngest-readme) - **Python** ([inngest-py](https://github.com/inngest/inngest-py)) - [参考文档](https://www.inngest.com/docs/reference/python?ref=github-inngest-readme) - **Go** ([inngestgo](https://github.com/inngest/inngestgo)) - [参考文档](https://pkg.go.dev/github.com/inngest/inngestgo) - **Kotlin / Java** ([inngest-kt](https://github.com/inngest/inngest-kt)) ## 项目架构 要了解自托管的工作原理,从宏观层面了解架构和系统组件是很有价值的。我们将查看一个简化的架构图并介绍该系统。

System Architecture

- **Event API** - 通过 HTTP 请求接收来自 SDK 的事件。通过 [Event Keys](https://www.inngest.com/docs/events/creating-an-event-key?ref=github-inngest-readme) 验证客户端请求。Event API 将事件载荷发布到内部事件流。 - **Event stream** - 充当 _Event API_ 和 _Runner_ 之间的缓冲区。 - **Runner** - 消费传入的事件并执行多项操作: - 根据事件类型调度新的“函数运行”(即作业),在 _State store_ 数据库中创建初始运行状态。根据函数的流控制配置将运行添加到队列。 - 恢复通过 [`waitForEvent`](https://www.inngest.com/docs/features/inngest-functions/steps-workflows/wait-for-event?ref=github-inngest-readme) 暂停且表达式匹配的函数。 - 取消具有匹配 [`cancelOn`](https://www.inngest.com/docs/features/inngest-functions/cancellation/cancel-on-events?ref=github-inngest-readme) 表达式的正在运行的函数 - 将摄取的事件写入数据库,以作为历史记录和供未来重放。 - **Queue** - 一个多租户感知、多层级队列,专为公平性和各种[流控制](https://www.inngest.com/docs/guides/flow-control?ref=github-inngest-readme)方法(并发、节流、优先级、防抖、速率限制)以及[批处理](https://www.inngest.com/docs/guides/batching?ref=github-inngest-readme)而设计。 - **Executor** - 负责执行函数,包括初始执行、步骤执行、将增量函数运行状态写入 _State store_ 以及失败后的重试。 - **State store (database)** - 持久化待处理和进行中的函数运行的数据。数据包括初始触发事件、步骤输出和步骤错误。 - **Database** - 持久化系统数据和历史记录,包括 Apps、Functions、Events 和 Function 运行结果。 - **API** - 用于以编程方式访问和管理系统资源的 GraphQL 和 REST API。 - **Dashboard UI** - 用于管理应用、函数和查看函数运行历史的 UI。
## 自托管 自托管 Inngest 服务器是可能的,而且很容易上手。在[我们的文档指南](https://www.inngest.com/docs/self-hosting?ref=github-inngest-readme)中了解更多关于自托管 Inngest 的信息。 ## 许可证 Inngest 服务器和 CLI 基于 Server Side Public License 以及 Apache 2.0 下的延迟开源发布 (DOSP) 提供。[在此查看许可证](/LICENSE.md)。 所有 Inngest [SDK](#sdks) 均基于 Apache 2.0 许可证提供。
标签:Cron 作业, DevOps 工具, EVTX分析, EVTX分析, Go 语言, TypeScript, Webhook, 事件驱动架构, 人工智能工作流, 任务队列, 分布式系统, 力导向图, 后台任务, 响应大小分析, 子域名突变, 安全插件, 工作流编排, 开源, 持久化函数, 数据可视化, 日志审计, 步骤函数, 测试用例, 状态管理, 自托管, 请求拦截, 边缘计算, 逆向工具, 重试机制