运行第一个工作流
快速体验 Temporal 的核心功能,创建一个简单的工作流应用。
本教程时长
约 5 分钟
准备环境
1
安装 Temporal CLI
运行 curl -sSf https://temporal.io/cli.sh | sh
2
启动本地服务器
运行 temporal server start-dev
3
创建 Java 项目
使用 Maven 或 Gradle 创建项目并添加 Temporal SDK 依赖
创建工作流项目
创建一个新的 Java 项目并添加工作流代码。
添加 Maven 依赖
在 pom.xml 中添加:
pom.xml
<dependency>
<groupId>io.temporal</groupId>
<artifactId>temporal-sdk</artifactId>
<version>1.23.1</version>
</dependency>定义工作流接口
创建 GreetingWorkflow.java 文件:
Java
package io.temporal.sample;
import io.temporal.workflow.WorkflowInterface;
import io.temporal.workflow.WorkflowMethod;
@WorkflowInterface
public interface GreetingWorkflow {
@WorkflowMethod
String greet(String name);
}实现工作流
创建 GreetingWorkflowImpl.java 文件:
Java
package io.temporal.sample;
import io.temporal.workflow.Workflow;
import java.time.Duration;
public class GreetingWorkflowImpl implements GreetingWorkflow {
@Override
public String greet(String name) {
// 获取工作流日志
Workflow.getLogger(getClass()).info("Greeting workflow started");
// 等待 1 秒
Workflow.sleep(Duration.ofSeconds(1));
String greeting = "Hello, " + name + "!";
Workflow.getLogger(getClass()).info("Greeting created: " + greeting);
return greeting;
}
}创建 Worker
创建一个 Worker 来执行工作流。
创建 WorkerMain.java 文件:
Java
package io.temporal.sample;
import io.temporal.client.WorkflowClient;
import io.temporal.serviceclient.WorkflowServiceStubs;
import io.temporal.serviceclient.WorkflowServiceStubsOptions;
import io.temporal.worker.WorkerFactory;
import io.temporal.worker.Worker;
public class WorkerMain {
public static void main(String[] args) {
// 创建服务连接
WorkflowServiceStubs service = WorkflowServiceStubs.newInstance(
WorkflowServiceStubsOptions.newBuilder()
.setTarget("localhost:7233")
.build()
);
// 创建工作流客户端
WorkflowClient client = WorkflowClient.newInstance(service);
// 创建 Worker 工厂
WorkerFactory factory = WorkerFactory.newInstance(client);
// 创建 Worker
Worker worker = factory.newWorker("my-task-queue");
// 注册工作流
worker.registerWorkflowImplementationTypes(
GreetingWorkflowImpl.class
);
// 启动 Worker
factory.start();
System.out.println("Worker started. Press Ctrl+C to exit.");
}
}启动工作流
创建启动器来执行工作流。
创建 StarterMain.java 文件:
Java
package io.temporal.sample;
import io.temporal.client.WorkflowClient;
import io.temporal.client.WorkflowOptions;
import io.temporal.serviceclient.WorkflowServiceStubs;
public class StarterMain {
public static void main(String[] args) {
// 创建服务连接
WorkflowServiceStubs service = WorkflowServiceStubs.newInstance(
WorkflowServiceStubsOptions.newBuilder()
.setTarget("localhost:7233")
.build()
);
// 创建工作流客户端
WorkflowClient client = WorkflowClient.newInstance(service);
// 配置工作流选项
WorkflowOptions options = WorkflowOptions.newBuilder()
.setTaskQueue("my-task-queue")
.setWorkflowId("greeting-workflow-123")
.build();
// 获取工作流存根
GreetingWorkflow workflow = client.newWorkflowStub(
GreetingWorkflow.class,
options
);
// 同步执行工作流
String result = workflow.greet("World");
System.out.println("Workflow result: " + result);
}
}运行程序
1. 启动 Worker(终端 1)
Terminal
mvn exec:java -Dexec.mainClass="io.temporal.sample.WorkerMain"2. 启动工作流(终端 2)
Terminal
mvn exec:java -Dexec.mainClass="io.temporal.sample.StarterMain"查看结果
成功!
Workflow result: Hello, World!
恭喜!您已经成功运行了第一个 Temporal 工作流。
在 Web UI 中查看
打开浏览器访问 Temporal Web UI,您可以看到工作流的执行历史和事件。
http://localhost:8233→ 查看工作流执行历史