- Implemented Temporal service with Docker Compose, including PostgreSQL setup and environment variables for configuration. - Added Temporal README and Chinese translation for documentation. - Introduced Windmill service with Docker Compose, including PostgreSQL setup and environment variables for configuration. - Added Windmill README and Chinese translation for documentation. - Updated MongoDB configurations to use host.docker.internal for better compatibility.
5.6 KiB
5.6 KiB
Temporal
Temporal 是一个可扩展且可靠的持久化执行运行时,用于运行称为 Temporal 工作流执行的可重入流程。它使开发人员能够编写简单、有弹性的代码,而无需担心故障、重试或状态管理。
功能特点
- 持久化执行:工作流可以在故障、重启甚至代码部署后继续运行
- 内置可靠性:自动重试、超时和错误处理
- 长期运行的工作流:支持运行数天、数月或数年的工作流
- 多语言 SDK:官方支持 Go、Java、TypeScript、Python、PHP、.NET
- 高级可见性:搜索和过滤工作流执行
- 事件驱动:通过信号、查询和更新与工作流交互
快速开始
-
复制
.env.example到.env:copy .env.example .env -
(可选)编辑
.env自定义数据库密码和设置 -
启动 Temporal:
docker compose up -d -
等待服务就绪(使用
docker compose logs -f temporal检查) -
访问 Temporal Web UI:
http://localhost:8233 -
Frontend 服务地址:
localhost:7233(gRPC)
默认配置
| 服务 | 端口 | 说明 |
|---|---|---|
| Temporal Frontend | 7233 | SDK 的 gRPC 端点 |
| Temporal Web UI | 8233 | Web 界面 |
| PostgreSQL | 5432 | 数据库(内部) |
身份验证:默认无身份验证。生产环境中请配置 mTLS 和授权。
环境变量
主要环境变量(完整列表请参阅 .env.example):
| 变量 | 说明 | 默认值 |
|---|---|---|
TEMPORAL_VERSION |
Temporal 服务器版本 | 1.24.2 |
TEMPORAL_UI_VERSION |
Temporal UI 版本 | 2.28.0 |
TEMPORAL_FRONTEND_PORT_OVERRIDE |
Frontend gRPC 端口 | 7233 |
TEMPORAL_UI_PORT_OVERRIDE |
Web UI 端口 | 8233 |
POSTGRES_DB |
数据库名称 | temporal |
POSTGRES_USER |
数据库用户 | temporal |
POSTGRES_PASSWORD |
数据库密码 | temporal |
TEMPORAL_LOG_LEVEL |
日志级别 | info |
TZ |
时区 | UTC |
资源需求
最低要求:
- CPU:1 核心
- 内存:1GB
- 磁盘:5GB
推荐配置:
- CPU:2+ 核心
- 内存:2GB+
- 磁盘:20GB+
数据卷
postgres_data:PostgreSQL 数据库数据temporal_data:Temporal 配置和状态
使用 Temporal
安装 SDK
选择您的语言:
Go:
go get go.temporal.io/sdk
TypeScript:
npm install @temporalio/client @temporalio/worker
Python:
pip install temporalio
编写工作流(Python 示例)
from temporalio import workflow, activity
from datetime import timedelta
@activity.defn
async def say_hello(name: str) -> str:
return f"Hello, {name}!"
@workflow.defn
class HelloWorkflow:
@workflow.run
async def run(self, name: str) -> str:
return await workflow.execute_activity(
say_hello,
name,
start_to_close_timeout=timedelta(seconds=10),
)
运行 Worker
from temporalio.client import Client
from temporalio.worker import Worker
async def main():
client = await Client.connect("localhost:7233")
worker = Worker(
client,
task_queue="hello-queue",
workflows=[HelloWorkflow],
activities=[say_hello],
)
await worker.run()
执行工作流
from temporalio.client import Client
async def main():
client = await Client.connect("localhost:7233")
result = await client.execute_workflow(
HelloWorkflow.run,
"World",
id="hello-workflow",
task_queue="hello-queue",
)
print(result)
使用 tctl CLI
admin-tools 容器(dev 配置文件)包含 tctl:
docker compose --profile dev run temporal-admin-tools
tctl namespace list
tctl workflow list
配置文件
dev:包含用于 CLI 访问的 admin-tools 容器
启用 dev 配置文件:
docker compose --profile dev up -d
安全注意事项
- 身份验证:为生产部署配置 mTLS
- 授权:为命名空间和工作流设置授权规则
- 数据库密码:使用强 PostgreSQL 密码
- 网络安全:限制对 Temporal 端口的访问
- 加密:为敏感数据启用静态加密
升级
升级 Temporal:
-
在
.env中更新版本 -
拉取并重启:
docker compose pull docker compose up -d -
检查日志查看迁移消息:
docker compose logs -f temporal
故障排除
服务无法启动:
- 检查日志:
docker compose logs temporal - 验证数据库:
docker compose ps postgres - 确保分配了足够的资源
SDK 无法连接:
- 验证端口 7233 可访问
- 检查防火墙规则
- 确保 SDK 版本兼容性
Web UI 无法加载:
- 检查 UI 日志:
docker compose logs temporal-ui - 验证 frontend 健康:
docker compose ps temporal - 清除浏览器缓存
参考资料
- 官方网站:https://temporal.io
- 文档:https://docs.temporal.io
- GitHub:https://github.com/temporalio/temporal
- 社区:https://community.temporal.io
- SDK 文档:https://docs.temporal.io/dev-guide
许可证
Temporal 使用 MIT 许可证。详情请参阅 LICENSE。