Skip to content

Commit b167c08

Browse files
committed
Schedule Job API
1 parent 1681816 commit b167c08

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed

sdk/src/main/java/io/dapr/client/DaprClient.java

+12
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.dapr.client.domain.HttpExtension;
2626
import io.dapr.client.domain.InvokeBindingRequest;
2727
import io.dapr.client.domain.InvokeMethodRequest;
28+
import io.dapr.client.domain.Job;
2829
import io.dapr.client.domain.PublishEventRequest;
2930
import io.dapr.client.domain.SaveStateRequest;
3031
import io.dapr.client.domain.State;
@@ -44,6 +45,8 @@
4445
import java.util.Map;
4546
import java.util.function.Function;
4647

48+
import com.google.protobuf.Message;
49+
4750
/**
4851
* Generic Client Adapter to be used regardless of the GRPC or the HTTP Client implementation required.
4952
*
@@ -662,6 +665,15 @@ Flux<SubscribeConfigurationResponse> subscribeConfiguration(String storeName, Li
662665
* @return Mono of {@link UnsubscribeConfigurationResponse} instance.
663666
*/
664667
Mono<UnsubscribeConfigurationResponse> unsubscribeConfiguration(UnsubscribeConfigurationRequest request);
668+
669+
/**
670+
* ScheduleJobAlpha1 creates and schedules a job.
671+
*
672+
* @param <T> The type of the data for the job.
673+
* @param job job to be scheduled
674+
* @return a Mono plan of type Void.
675+
*/
676+
<T extends Message> Mono<Void> scheduleJobAlpha1(Job<T> job);
665677

666678
/**
667679
* Returns a newly created gRPC stub with proper interceptors and channel for gRPC proxy invocation.

sdk/src/main/java/io/dapr/client/DaprClientImpl.java

+44
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
package io.dapr.client;
1515

1616
import com.google.common.base.Strings;
17+
import com.google.protobuf.Any;
1718
import com.google.protobuf.ByteString;
1819
import com.google.protobuf.Empty;
20+
import com.google.protobuf.Message;
1921
import io.dapr.client.domain.ActorMetadata;
2022
import io.dapr.client.domain.AppConnectionPropertiesHealthMetadata;
2123
import io.dapr.client.domain.AppConnectionPropertiesMetadata;
@@ -37,6 +39,7 @@
3739
import io.dapr.client.domain.HttpExtension;
3840
import io.dapr.client.domain.InvokeBindingRequest;
3941
import io.dapr.client.domain.InvokeMethodRequest;
42+
import io.dapr.client.domain.Job;
4043
import io.dapr.client.domain.LockRequest;
4144
import io.dapr.client.domain.PublishEventRequest;
4245
import io.dapr.client.domain.QueryStateItem;
@@ -1175,6 +1178,47 @@ public Mono<UnsubscribeConfigurationResponse> unsubscribeConfiguration(Unsubscri
11751178
}
11761179
}
11771180

1181+
@Override
1182+
public <T extends Message> Mono<Void> scheduleJobAlpha1(Job<T> job) {
1183+
try {
1184+
final String name = job.getName();
1185+
final T data = job.getData();
1186+
1187+
if (name == null || name.trim().isEmpty()) {
1188+
throw new IllegalArgumentException("Job name cannot be null or empty");
1189+
}
1190+
if (data == null) {
1191+
throw new IllegalArgumentException("Job data cannot be empty");
1192+
}
1193+
1194+
DaprProtos.Job.Builder jobBuilder = DaprProtos.Job.newBuilder()
1195+
.setName(name)
1196+
.setData(Any.pack(data));
1197+
if (job.getSchedule() != null && !job.getSchedule().trim().isEmpty()) {
1198+
jobBuilder.setSchedule(job.getSchedule());
1199+
}
1200+
if (job.getRepeats() != null) {
1201+
jobBuilder.setRepeats(job.getRepeats());
1202+
}
1203+
if (job.getDueTime() != null && !job.getDueTime().trim().isEmpty()) {
1204+
jobBuilder.setDueTime(job.getDueTime());
1205+
}
1206+
if (job.getTtl() != null && !job.getTtl().trim().isEmpty()) {
1207+
jobBuilder.setTtl(job.getTtl());
1208+
}
1209+
1210+
DaprProtos.ScheduleJobRequest.Builder builder =
1211+
DaprProtos.ScheduleJobRequest.newBuilder()
1212+
.setJob(jobBuilder.build());
1213+
1214+
return this.<DaprProtos.ScheduleJobResponse>createMono(
1215+
it -> intercept(null, asyncStub).scheduleJobAlpha1(builder.build(), it))
1216+
.then();
1217+
} catch (Exception ex) {
1218+
return DaprException.wrapMono(ex);
1219+
}
1220+
}
1221+
11781222
/**
11791223
* Build a new Configuration Item from provided parameter.
11801224
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package io.dapr.client.domain;
2+
3+
import com.google.protobuf.Message;
4+
5+
/**
6+
* A Job to schedule
7+
*
8+
* @param <T> The class type of Job data.
9+
*/
10+
public final class Job<T extends Message> {
11+
12+
private final String name;
13+
14+
private String schedule;
15+
16+
private Integer repeats;
17+
18+
private String dueTime;
19+
20+
private String ttl;
21+
22+
private final T data;
23+
24+
/**
25+
* Constructor for Job
26+
*
27+
* @param name name of the job to create
28+
*/
29+
public Job(String name, T data) {
30+
super();
31+
this.name = name;
32+
this.data = data;
33+
}
34+
35+
public String getSchedule() {
36+
return schedule;
37+
}
38+
39+
public void setSchedule(String schedule) {
40+
this.schedule = schedule;
41+
}
42+
43+
public Integer getRepeats() {
44+
return repeats;
45+
}
46+
47+
public void setRepeats(Integer repeats) {
48+
this.repeats = repeats;
49+
}
50+
51+
public String getDueTime() {
52+
return dueTime;
53+
}
54+
55+
public void setDueTime(String dueTime) {
56+
this.dueTime = dueTime;
57+
}
58+
59+
public String getTtl() {
60+
return ttl;
61+
}
62+
63+
public void setTtl(String ttl) {
64+
this.ttl = ttl;
65+
}
66+
67+
public T getData() {
68+
return data;
69+
}
70+
71+
public String getName() {
72+
return name;
73+
}
74+
}

0 commit comments

Comments
 (0)