-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* new greeter template to show durable execution * new greeter template for Java templates * new greeter template for Kotlin templates * new greeter template for Go templates * new greeter template for Python templates * new greeter template for Rust templates * Fix comments * Add ghost to error messages * Fix wrong imports in templates * Remove licenses of templates because they are shown as code snippets in the docs * Make code snippets more concise * Use pydantic for Python template * throw runtime exception in java templates * Fix import in TS deno template * Kotlin template: Rename to utils.kt * Upgrade go version * Fix rust template * Fix Java templates issues * Fix cloudflare workers template * Fix package name quarkus template * Fix Rust shuttle template * Clean imports
- Loading branch information
Showing
42 changed files
with
551 additions
and
172 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
|
||
// You can remove this file. | ||
// It's only purpose is providing stubs for the template. | ||
|
||
export function sendNotification(greetingId: string, name: string) { | ||
if (Math.random() < 0.5) { // 50% chance of failure | ||
console.error(`👻 Failed to send notification: ${greetingId} - ${name}`); | ||
throw new Error(`Failed to send notification ${greetingId} - ${name}`); | ||
} | ||
console.log(`Notification sent: ${greetingId} - ${name}`); | ||
} | ||
|
||
export function sendReminder(greetingId: string) { | ||
if (Math.random() < 0.5) { // 50% chance of failure | ||
console.error(`👻 Failed to send reminder: ${greetingId}`); | ||
throw new Error(`Failed to send reminder: ${greetingId}`); | ||
} | ||
console.log(`Reminder sent: ${greetingId}`); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,23 @@ | ||
import { Context, endpoint, service } from "@restatedev/restate-sdk-cloudflare-workers/fetch"; | ||
import * as restate from "@restatedev/restate-sdk-cloudflare-workers/fetch"; | ||
import { sendNotification, sendReminder } from "./utils.js"; | ||
|
||
// Template of a Restate service and handler | ||
// | ||
// Have a look at the TS QuickStart: https://docs.restate.dev/get_started/quickstart?sdk=ts | ||
// | ||
export default restate | ||
.endpoint() | ||
.bind( | ||
restate.service({ | ||
name: "greeter", | ||
handlers: { | ||
greet: async (ctx: restate.Context, name: string) => { | ||
// Durably execute a set of steps; resilient against failures | ||
const greetingId = ctx.rand.uuidv4(); | ||
await ctx.run(() => sendNotification(greetingId, name)); | ||
await ctx.sleep(1000); | ||
await ctx.run(() => sendReminder(greetingId)); | ||
|
||
const greeter = service({ | ||
name: "greeter", | ||
handlers: { | ||
greet: async (ctx: Context, greeting: string) => { | ||
return `${greeting}!`; | ||
}, | ||
}, | ||
}); | ||
|
||
export default endpoint().bind(greeter).handler(); | ||
// Respond to caller | ||
return `You said hi to ${name}!`; | ||
}, | ||
}, | ||
}), | ||
) | ||
.handler(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// You can remove this file. | ||
// It's only purpose is providing stubs for the template. | ||
|
||
export function sendNotification(greetingId: string, name: string) { | ||
if (Math.random() < 0.5) { | ||
// 50% chance of failure | ||
console.error(`👻 Failed to send notification: ${greetingId} - ${name}`); | ||
throw new Error(`Failed to send notification ${greetingId} - ${name}`); | ||
} | ||
console.log(`Notification sent: ${greetingId} - ${name}`); | ||
} | ||
|
||
export function sendReminder(greetingId: string) { | ||
if (Math.random() < 0.5) { | ||
// 50% chance of failure | ||
console.error(`👻 Failed to send reminder: ${greetingId}`); | ||
throw new Error(`Failed to send reminder: ${greetingId}`); | ||
} | ||
console.log(`Reminder sent: ${greetingId}`); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,26 @@ | ||
import { | ||
Context, | ||
endpoint, | ||
service, | ||
} from "npm:@restatedev/restate-sdk@^1.4.0/fetch"; | ||
import * as restate from "npm:@restatedev/restate-sdk/fetch"; | ||
import { sendNotification, sendReminder } from "./utils.ts"; | ||
|
||
// Template of a Restate service and handler | ||
// | ||
// Have a look at the TS QuickStart: https://docs.restate.dev/get_started/quickstart?sdk=ts | ||
// | ||
const handler = restate | ||
.endpoint() | ||
.bind( | ||
restate.service({ | ||
name: "Greeter", | ||
handlers: { | ||
greet: async (ctx: restate.Context, name: string) => { | ||
// Durably execute a set of steps; resilient against failures | ||
const greetingId = ctx.rand.uuidv4(); | ||
await ctx.run(() => sendNotification(greetingId, name)); | ||
await ctx.sleep(1000); | ||
await ctx.run(() => sendReminder(greetingId)); | ||
|
||
const greeter = service({ | ||
name: "Greeter", | ||
handlers: { | ||
greet: async (ctx: Context, greeting: string) => { | ||
return `${greeting}!`; | ||
}, | ||
}, | ||
}); | ||
|
||
const handler = endpoint().bind(greeter).bidirectional().handler(); | ||
// Respond to caller | ||
return `You said hi to ${name}!`; | ||
}, | ||
}, | ||
}), | ||
) | ||
.bidirectional() | ||
.handler(); | ||
|
||
Deno.serve({ port: 9080 }, handler.fetch); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// You can remove this file. | ||
// It's only purpose is providing stubs for the template. | ||
|
||
export function sendNotification(greetingId: string, name: string) { | ||
if (Math.random() < 0.5) { | ||
// 50% chance of failure | ||
console.error(`👻 Failed to send notification: ${greetingId} - ${name}`); | ||
throw new Error(`Failed to send notification ${greetingId} - ${name}`); | ||
} | ||
console.log(`Notification sent: ${greetingId} - ${name}`); | ||
} | ||
|
||
export function sendReminder(greetingId: string) { | ||
if (Math.random() < 0.5) { | ||
// 50% chance of failure | ||
console.error(`👻 Failed to send reminder: ${greetingId}`); | ||
throw new Error(`Failed to send reminder: ${greetingId}`); | ||
} | ||
console.log(`Reminder sent: ${greetingId}`); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,33 @@ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
|
||
restate "github.com/restatedev/sdk-go" | ||
"time" | ||
) | ||
|
||
// Greeter is a struct which represents a Restate service; reflection will turn exported methods into service handlers | ||
type Greeter struct{} | ||
|
||
func (Greeter) Greet(ctx restate.Context, greeting string) (string, error) { | ||
return fmt.Sprintf("%s!", greeting), nil | ||
func (Greeter) Greet(ctx restate.Context, name string) (string, error) { | ||
// Durably execute a set of steps; resilient against failures | ||
greetingId := restate.Rand(ctx).UUID().String() | ||
|
||
if _, err := restate.Run(ctx, func(ctx restate.RunContext) (restate.Void, error) { | ||
return restate.Void{}, SendNotification(greetingId, name) | ||
}); err != nil { | ||
return "", err | ||
} | ||
|
||
if err := restate.Sleep(ctx, 1*time.Second); err != nil { | ||
return "", err | ||
} | ||
|
||
if _, err := restate.Run(ctx, func(ctx restate.RunContext) (restate.Void, error) { | ||
return restate.Void{}, SendReminder(greetingId) | ||
}); err != nil { | ||
return "", err | ||
} | ||
|
||
// Respond to caller | ||
return "You said hi to " + name + "!", nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"math/rand" | ||
) | ||
|
||
func SendNotification(greetingId string, name string) error { | ||
if rand.Float32() < 0.5 { // 50% chance of failure | ||
fmt.Printf("👻 Failed to send notification: %s - %s\n", greetingId, name) | ||
return fmt.Errorf("failed to send notification: %s - %s", greetingId, name) | ||
} | ||
fmt.Printf("Notification sent: %s - %s\n", greetingId, name) | ||
return nil | ||
} | ||
|
||
func SendReminder(greetingId string) error { | ||
if rand.Float32() < 0.5 { // 50% chance of failure | ||
fmt.Printf("👻 Failed to send reminder: %s\n", greetingId) | ||
return fmt.Errorf("failed to send reminder: %s", greetingId) | ||
} | ||
fmt.Printf("Reminder sent: %s\n", greetingId) | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 21 additions & 24 deletions
45
templates/java-gradle/src/main/java/my/example/Greeter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,33 @@ | ||
/* | ||
* Copyright (c) 2024 - Restate Software, Inc., Restate GmbH | ||
* | ||
* This file is part of the Restate examples, | ||
* which is released under the MIT license. | ||
* | ||
* You can find a copy of the license in the file LICENSE | ||
* in the root directory of this repository or package or at | ||
* https://github.com/restatedev/examples/ | ||
*/ | ||
|
||
package my.example; | ||
|
||
import dev.restate.sdk.Context; | ||
import dev.restate.sdk.annotation.Handler; | ||
import dev.restate.sdk.annotation.Service; | ||
import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder; | ||
|
||
/** | ||
* Template of a Restate service and handler | ||
* Have a look at the Java QuickStart to learn how to run this: https://docs.restate.dev/get_started/quickstart?sdk=java | ||
*/ | ||
import java.time.Duration; | ||
|
||
import static my.example.Utils.sendNotification; | ||
import static my.example.Utils.sendReminder; | ||
|
||
@Service | ||
public class Greeter { | ||
|
||
@Handler | ||
public String greet(Context ctx, String greeting) { | ||
return "Hello " + greeting; | ||
} | ||
@Handler | ||
public String greet(Context ctx, String name) { | ||
// Durably execute a set of steps; resilient against failures | ||
String greetingId = ctx.random().nextUUID().toString(); | ||
ctx.run(() -> sendNotification(greetingId, name)); | ||
ctx.sleep(Duration.ofMillis(1000)); | ||
ctx.run(() -> sendReminder(greetingId)); | ||
|
||
// Respond to caller | ||
return "You said hi to " + name + "!"; | ||
} | ||
|
||
public static void main(String[] args) { | ||
RestateHttpEndpointBuilder.builder() | ||
.bind(new Greeter()) | ||
.buildAndListen(); | ||
} | ||
public static void main(String[] args) { | ||
RestateHttpEndpointBuilder.builder() | ||
.bind(new Greeter()) | ||
.buildAndListen(); | ||
} | ||
} |
Oops, something went wrong.