Quick Start
View SourceFull code for this example can be found in the
temporal_sdk_samples repository as a
HelloWorld/hello_world sample.
Add temporal_sdk to your application runtime dependencies list:
Elixir
# mix.exs
defp deps do
[
{:temporal_sdk, ">= 0.0.0"}
]
endErlang
%% rebar3.config
{deps, [
temporal_sdk
]}.
%% src/hello_world.app.src
{application, hello_world, [
{applications, [
temporal_sdk
]}
]}.Configure activity and workflow runtime task workers:
Elixir
# config/config.exs
config :temporal_sdk,
clusters: [
cluster_1: [
activities: [[task_queue: "default"]],
workflows: [[task_queue: "default"]]
]
]See: TemporalSdk.Node, TemporalSdk.Cluster and TemporalSdk.Worker
Erlang
%% config/sys.config
[
{temporal_sdk, [
{clusters, [
{cluster_1, [
{activities, [[{task_queue, "default"}]]},
{workflows, [[{task_queue, "default"}]]}
]}
]}
]}
].See: :temporal_sdk_node, :temporal_sdk_cluster and :temporal_sdk_worker
Implement Temporal activity definition:
Elixir
# lib/hello_world_activity.ex
defmodule HelloWorld.Activity do
use TemporalSdk.Activity
@impl true
def execute(_context, [[string]]), do: [[String.upcase(string)]]
endSee: TemporalSdk.Activity
Erlang
%% src/hello_world_activity.erl
-module(hello_world_activity).
-export([execute/2]).
-include_lib("temporal_sdk/include/activity.hrl").
execute(_Context, [[String]]) -> [[string:uppercase(String)]].Implement Temporal workflow definition:
Elixir
# lib/hello_world_workflow.ex
defmodule HelloWorld.Workflow do
use TemporalSdk.Workflow
@impl true
def execute(_context, input) do
a1 = start_activity(HelloWorld.Activity, [["hello"]])
a2 = start_activity(HelloWorld.Activity, [["world"]])
[%{result: a1_result}, %{result: a2_result}] = wait_all([a1, a2])
IO.puts("#{a1_result} #{a2_result} #{input} \n")
end
def start do
TemporalSdk.start_workflow(:cluster_1, "default", HelloWorld.Workflow, [
:wait,
input: [["from Temporal"]]
])
end
endSee: TemporalSdk.Workflow
Erlang
%% src/hello_world_workflow.erl
-module(hello_world_workflow).
-export([execute/2, start/0]).
-include_lib("temporal_sdk/include/workflow.hrl").
execute(_Context, Input) ->
A1 = start_activity(hello_world_activity, [[~b"hello"]]),
A2 = start_activity(hello_world_activity, [[~b"world"]]),
[#{result := A1Result}, #{result := A2Result}] = wait_all([A1, A2]),
io:fwrite("~s ~s ~s~n~n", [A1Result, A2Result, Input]).
start() ->
temporal_sdk:start_workflow(cluster_1, "default", hello_world_workflow, [
wait, {input, [[~b"from Temporal"]]}
]).Start iex -S mix or rebar3 shell and run Temporal
workflow execution:
Elixir
iex(1)> HelloWorld.Workflow.start()
HELLO WORLD from Temporal
...Erlang
1> hello_world_workflow:start().
HELLO WORLD from Temporal
...Requirements
The basic config.exs/sys.config configuration files provided above assumes an unsecured Temporal
server running on localhost:7233.
For development and testing purposes it is recommended to use
Temporal CLI: