@RestateComponent
@Service
public class Greeter {
@Value("${greetingPrefix}")
private String greetingPrefix;
public record Greeting(String name) {}
public record GreetingResponse(String message) {}
@Handler
public GreetingResponse greet(Greeting req) {
// Durably execute a set of steps; resilient against failures
String greetingId = Restate.random().nextUUID().toString();
Restate.run("Notification", () -> sendNotification(greetingId, req.name));
Restate.sleep(Duration.ofSeconds(1));
Restate.run("Reminder", () -> sendReminder(greetingId, req.name));
// Respond to caller
return new GreetingResponse("You said " + greetingPrefix + " to " + req.name + "!");
}
}