This crate defines an alpha-stage Temporal Rust SDK.
Currently defining activities and running an activity-only worker is the most stable code. Workflow definitions exist and running a workflow worker works, but the API is still very unstable.
An example of running an activity worker:
use std::{str::FromStr, sync::Arc};
use temporal_sdk::{sdk_client_options, ActContext, Worker};
use squads_temporal_sdk_core::{init_worker, Url, CoreRuntime};
use squads_temporal_sdk_core_api::{
worker::{WorkerConfigBuilder, WorkerVersioningStrategy},
telemetry::TelemetryOptionsBuilder
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let server_options = sdk_client_options(Url::from_str("http://localhost:7233")?).build()?;
let client = server_options.connect("default", None).await?;
let telemetry_options = TelemetryOptionsBuilder::default().build()?;
let runtime = CoreRuntime::new_assume_tokio(telemetry_options)?;
let worker_config = WorkerConfigBuilder::default()
.namespace("default")
.task_queue("task_queue")
.versioning_strategy(WorkerVersioningStrategy::None { build_id: "rust-sdk".to_owned() })
.build()?;
let core_worker = init_worker(&runtime, worker_config, client)?;
let mut worker = Worker::new_from_core(Arc::new(core_worker), "task_queue");
worker.register_activity(
"echo_activity",
|_ctx: ActContext, echo_me: String| async move { Ok(echo_me) },
);
worker.run().await?;
Ok(())
}