Hi Temporal team,
Does Temporal Java SDK natively supports schedule? Workflows | Temporal Documentation says we can use the gRPC API and method create Schedule. Can you provide more information/examples for this?
Hi Temporal team,
Does Temporal Java SDK natively supports schedule? Workflows | Temporal Documentation says we can use the gRPC API and method create Schedule. Can you provide more information/examples for this?
you can use createSchedule
method from the WorkflowServiceStubs
E.g.
WorkflowClient client = WorkflowClient.newInstance(service);
ScheduleSpec.Builder interval =
ScheduleSpec.newBuilder()
.addInterval(
IntervalSpec.newBuilder()
.setInterval(com.google.protobuf.Duration.newBuilder().setSeconds(5000).build())
.build());
NewWorkflowExecutionInfo workflowExecutionInfo =
NewWorkflowExecutionInfo.newBuilder()
.setWorkflowType(WorkflowType.newBuilder().setName("MyWorkflow").build())
.setTaskQueue(TaskQueue.newBuilder().setName("taskqueue").build())
.build();
client
.getWorkflowServiceStubs()
.blockingStub()
.createSchedule(
CreateScheduleRequest.newBuilder()
.setScheduleId("scheduleId")
.setRequestId("my-request")
.setNamespace("default")
.setSchedule(
Schedule.newBuilder()
.setSpec(interval.build())
.setAction(
ScheduleAction.newBuilder()
.setStartWorkflow(workflowExecutionInfo)
.build())
.build())
.build());
I will try to add this to the samples-repo [Feature Request] sample for schedule · Issue #461 · temporalio/samples-java · GitHub
This is being actively worked on here and should be done in not too long.
Thanks @antonio.perez for the quick reply. @Chad_Retz , Is there any estimate of when this will be available?
Not exactly. Hopefully soon (i.e. in master
in days or weeks, not months).
I just now tried the above example, but facing below error:
io.grpc.StatusRuntimeException: UNIMPLEMENTED: unknown method CreateSchedule for service temporal.api.workflowservice.v1.WorkflowService
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:262)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:243)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:156)
at io.temporal.api.workflowservice.v1.WorkflowServiceGrpc$WorkflowServiceBlockingStub.createSchedule(WorkflowServiceGrpc.java:3643)
Is there something that I’m missing here? Also, where do we specify the workflow that schedule should run? Is it the WorkflowType?
Yes, it is the workflow type,
I ran the code above with java-sdk 1.19.1. Which SDK are you using?
I had 1.15.1 earlier. Upgraded to 1.19.1 but still facing the same error.
that is weird,
can you try cloning the repo and running this example temporal_samples-java/HelloSchedule.java at community_8388 · antmendoza/temporal_samples-java · GitHub ?
Let me know how it goes.
Still same error:
Exception in thread "main" io.grpc.StatusRuntimeException: UNIMPLEMENTED: unknown method CreateSchedule for service temporal.api.workflowservice.v1.WorkflowService
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:271)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:252)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:165)
at io.temporal.api.workflowservice.v1.WorkflowServiceGrpc$WorkflowServiceBlockingStub.createSchedule(WorkflowServiceGrpc.java:4164)
at io.temporal.samples.hello.HelloSchedule.main(HelloSchedule.java:59)
May be this is related to my temporal set up for local. I’m using following docker images:
I think so @Sowmya
Schedule was added in 1.17 https://github.com/temporalio/temporal/releases/tag/v1.17.0
Can you pull the latest version in your local environment?
Worked with latest versions. Thanks
Hi @antonio.perez ,
We are good to use schedule feature from the below suggested solution in production, right? Wanted to confirm once.
Yes should be ok to use schedules for prod use cases. Would make sure service is on latest version v1.20.3
@antonio.perez Regarding the example that you have posted can you please let me know the following
createSchedule
request is made with different scheduleId
but same requestId
? Will the second submit request throw error or it will be silently ignored?requestId
idempotency is applicable for only successful createSchdule
request? I mean let’s say my first createSchedule
request with requestId1
fails for some reason then I can retry with same requestId1
?scheduleId
, requestId
, etc are explained?Couple of other questions