Current section

Files

Jump to
temporal_sdk src api temporal_sdk_api_poll.erl
Raw

src/api/temporal_sdk_api_poll.erl

-module(temporal_sdk_api_poll).
% elp:ignore W0012 W0040
-moduledoc false.
-export([
poll_activity_task_queue/1,
poll_nexus_task_queue/1,
poll_workflow_task_queue/1,
poll_workflow_task_queue/2,
shutdown_worker/1
]).
-include("proto.hrl").
-spec poll_activity_task_queue(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:msg_result().
poll_activity_task_queue(ApiContext) ->
#{
worker_opts := #{
namespace := Namespace,
task_queue := TaskQueue,
worker_version := WorkerVersion
}
} = ApiContext,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.PollActivityTaskQueueRequest',
#{
namespace => Namespace,
task_queue => #{name => TaskQueue, kind => 'TASK_QUEUE_KIND_NORMAL'},
% TODO: consider adding task_queue_metadata => #{max_tasks_per_second => ...},
worker_version_capabilities => WorkerVersion
}
),
temporal_sdk_api:request('PollActivityTaskQueue', ApiContext, Msg, msg).
-spec poll_nexus_task_queue(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:msg_result().
poll_nexus_task_queue(ApiContext) ->
#{
worker_opts := #{
namespace := Namespace,
task_queue := TaskQueue,
worker_version := WorkerVersion
}
} = ApiContext,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.PollNexusTaskQueueRequest',
#{
namespace => Namespace,
task_queue => #{name => TaskQueue, kind => 'TASK_QUEUE_KIND_NORMAL'},
worker_version_capabilities => WorkerVersion
}
),
temporal_sdk_api:request('PollNexusTaskQueue', ApiContext, Msg, msg).
-spec poll_workflow_task_queue(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:msg_result().
poll_workflow_task_queue(
#{task_opts := #{sticky_attributes := #{worker_task_queue := StickyTaskQueue}}} = ApiContext
) ->
poll_workflow_task_queue(ApiContext, StickyTaskQueue).
-spec poll_workflow_task_queue(
ApiContext :: temporal_sdk_api:context(),
TaskQueue :: ?TEMPORAL_SPEC:'temporal.api.taskqueue.v1.TaskQueue'()
) -> temporal_sdk_client:msg_result().
poll_workflow_task_queue(ApiContext, TaskQueue) ->
#{
worker_opts := #{namespace := Namespace, worker_version := WorkerVersion}
} = ApiContext,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest',
#{
namespace => Namespace,
task_queue => TaskQueue,
worker_version_capabilities => WorkerVersion
}
),
temporal_sdk_api:request('PollWorkflowTaskQueue', ApiContext, Msg, msg).
-spec shutdown_worker(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:cast_result().
shutdown_worker(ApiContext) ->
#{
worker_opts := #{namespace := Namespace},
task_opts := #{sticky_attributes := #{worker_task_queue := #{name := STQ}}}
} = ApiContext,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.ShutdownWorkerRequest',
#{namespace => Namespace, sticky_task_queue => STQ, reason => "graceful_shutdown"}
),
temporal_sdk_api:request('ShutdownWorker', ApiContext, Msg, cast).