运行第一个工作流

快速体验 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→ 查看工作流执行历史

下一步