Hello World 教程

在 5 分钟内创建并运行您的第一个 Temporal 工作流。

开始之前

确保您已完成 Temporal 的安装,并且本地 Temporal Server 正在运行(端口 7233)。

Temporal 工作流架构

第一步:创建工作流

工作流定义了整个业务流程。让我们创建一个简单的工作流,返回 "Hello World!" 消息。

HelloWorldWorkflow.javaJava
package io.temporal.sample;

import io.temporal.workflow.WorkflowInterface;
import io.temporal.workflow.WorkflowMethod;

@WorkflowInterface
public interface HelloWorldWorkflow {
    
    @WorkflowMethod
    String execute(String name);
}

public class HelloWorldWorkflowImpl implements HelloWorldWorkflow {
    
    @Override
    public String execute(String name) {
        return "Hello, " + name + "!";
    }
}

第二步:创建 Worker

Worker 负责执行工作流代码。让我们创建一个 Worker 来运行我们的工作流。

WorkerMain.javaJava
package io.temporal.sample;

import io.temporal.client.WorkflowClient;
import io.temporal.client.WorkflowClientOptions;
import io.temporal.serviceclient.WorkflowServiceStubs;
import io.temporal.serviceclient.WorkflowServiceStubsOptions;
import io.temporal.worker.Worker;
import io.temporal.worker.WorkerFactory;

public class WorkerMain {
    
    public static void main(String[] args) {
        // 创建客户端连接
        WorkflowServiceStubs service = WorkflowServiceStubs.newInstance(
            WorkflowServiceStubsOptions.newBuilder()
                .setTarget("localhost:7233")
                .build()
        );
        
        WorkflowClient client = WorkflowClient.newInstance(
            service,
            WorkflowClientOptions.newBuilder().build()
        );
        
        // 创建 Worker 工厂
        WorkerFactory factory = WorkerFactory.newInstance(client);
        
        // 创建 Worker
        Worker worker = factory.newWorker("hello-world-task-queue");
        
        // 注册工作流实现
        worker.registerWorkflowImplementationTypes(
            HelloWorldWorkflowImpl.class
        );
        
        // 启动 Worker
        factory.start();
        
        System.out.println("Worker started. Press Ctrl+C to exit.");
    }
}

第三步:启动工作流

创建一个客户端程序来启动工作流执行。

StarterMain.javaJava
package io.temporal.sample;

import io.temporal.client.WorkflowClient;
import io.temporal.client.WorkflowOptions;
import io.temporal.serviceclient.WorkflowServiceStubs;
import io.temporal.serviceclient.WorkflowServiceStubsOptions;
import io.temporal.workflow.WorkflowExecution;

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("hello-world-task-queue")
            .setWorkflowId("hello-world-workflow-id")
            .build();
        
        // 获取工作流存根
        HelloWorldWorkflow workflow = client.newWorkflowStub(
            HelloWorldWorkflow.class,
            options
        );
        
        // 执行工作流
        String result = workflow.execute("World");
        
        System.out.println("Workflow result: " + result);
        
        System.exit(0);
    }
}

运行程序

1. 启动 Worker(终端 1)

Terminal
java -cp temporal-sdk.jar WorkerMain

2. 启动工作流(终端 2)

Terminal
java -cp temporal-sdk.jar StarterMain

查看结果

Workflow result: Hello, World!

在 Web UI 中查看

打开浏览器访问 Temporal Web UI,您可以看到工作流的执行历史和事件。

访问 http://localhost:8233
点击工作流 ID "hello-world-workflow-id" 查看详细的执行历史。

核心概念总结

工作流接口

使用 @WorkflowInterface 注解定义工作流接口

Worker 配置

使用 WorkerFactory 创建 Worker,通过 registerWorkflowImplementationTypes() 注册

客户端调用

使用 newWorkflowStub() 获取工作流存根,调用 execute() 启动

下一步

恭喜!您已经成功运行了第一个 Temporal 工作流。接下来学习更多核心概念: