Worker processes - Rust SDK
Run a Worker Process
The Worker Process is where Workflow and Activity code executes. A Worker polls a specific Task Queue, processes Tasks from that queue, and reports results back to the Temporal Service.
- Each Worker Entity in a Worker Process must register the exact Workflow Types and Activity Types it may execute.
- Each Worker Entity must associate with exactly one Task Queue.
- Each Worker Entity polling the same Task Queue must be registered with the same Workflow Types and Activity Types.
A Worker Entity is the component within a Worker Process that listens on a specific Task Queue.
A Worker Entity may host a Workflow Worker, an Activity Worker, or both. In many applications, a single Worker Process is enough, though you can scale out by running multiple Workers polling the same Task Queue.
In Rust, create a Worker, configure it with your Task Queue, register your Workflows and Activities, and then run it.
use temporalio_client::{Client, ClientOptions, Connection, ConnectionOptions};
use temporalio_sdk::{Worker, WorkerOptions};
use temporalio_sdk_core::{CoreRuntime, RuntimeOptions, Url};
use crate::workflow_messaging::GreetingsWorkflow;
use crate::activities::MyActivities;
#[tokio::main]
pub async fn run() -> Result<(), Box<dyn std::error::Error>> {
// Connect to local Temporal server
let connection_options =
ConnectionOptions::new(Url::from_str("http://localhost:7233")?).build();
let runtime = CoreRuntime::new_assume_tokio(RuntimeOptions::builder().build()?)?;
// Client setup
let connection = Connection::connect(connection_options).await?;
let client = Client::new(connection, ClientOptions::new("default").build())?;
let worker_options = WorkerOptions::new("my-task-queue")
.register_activities(MyActivities)
.register_workflow::<GreetingsWorkflow>()
.build();
Worker::new(&runtime, client, worker_options)?.run().await?;
Ok(())
}
Register types
All Workers polling the same Task Queue name must be registered to handle the exact same Workflow Types and Activity Types. If a Worker receives a Task for a type it does not know how to execute, that Task fails, but the Workflow Execution itself does not necessarily fail.
When you create a Worker in Rust, register the Workflow and Activity types it's allowed to execute in the WorkerOptions:
let worker_options = WorkerOptions::new("my-task-queue")
.register_activities(MyActivities)
.register_workflow::<GreetingsWorkflow>()
.build();