-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
25d23f3
commit 37ece2c
Showing
20 changed files
with
1,084 additions
and
6 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
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 |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Compiled class file | ||
*.class | ||
|
||
# Log file | ||
*.log | ||
|
||
# BlueJ files | ||
*.ctxt | ||
|
||
# Mobile Tools for Java (J2ME) | ||
.mtj.tmp/ | ||
|
||
# Package Files # | ||
*.jar | ||
*.war | ||
*.nar | ||
*.ear | ||
*.zip | ||
*.tar.gz | ||
*.rar | ||
|
||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml | ||
hs_err_pid* | ||
|
||
# Ignore Gradle project-specific cache directory | ||
.gradle | ||
|
||
# Ignore Gradle build output directory | ||
build | ||
|
||
.idea | ||
*.iml | ||
|
||
# Unignore the gradle wrapper | ||
!gradle/wrapper/gradle-wrapper.jar |
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,66 @@ | ||
# Examples of the basic concepts for Restate in Kotlin | ||
|
||
The examples here showcase the most basic building blocks of Restate. **Durable Execution**, | ||
**Durable Promises**, and **Virtual Objects**, and the **Workflows** abstraction built on top | ||
of them. | ||
|
||
The individual example files contain code snippets with comments and a brief descriptions | ||
about how they work and how they can be run. | ||
|
||
### Examples | ||
|
||
* **[Basic Durable Execution:](durable_execution/RoleUpdateService.java):** Running code cleanly | ||
to the end in the presence of failures. Automatic retries and recovery of previously | ||
finished actions. The example applies a series of updates and permission setting changes | ||
to user's profile. | ||
```shell | ||
./gradlew -PmainClass=durable_execution.RoleUpdateServiceKt run | ||
``` | ||
|
||
* **[Durable Execution with Compensations](durable_execution_compensation/RoleUpdateService.java):** | ||
Reliably compensating / undoing previous actions upon unrecoverable errors halfway | ||
through multi-step change. This is the same example as above, extended for cases where | ||
a part of the change cannot be applied (conflict) and everything has to roll back. | ||
```shell | ||
./gradlew -PmainClass=durable_execution_compensation.RoleUpdateServiceKt run | ||
``` | ||
|
||
* **[Workflows](workflows/SignupWorkflow.java):** Workflows are durable execution tasks that can | ||
be submitted and awaited. They have an identity and can be signaled and queried | ||
through durable promises. The example is a user-signup flow that takes multiple | ||
operations, including verifying the email address. | ||
|
||
* **[Virtual Objects](virtual_objects/GreeterObject.java):** Stateful serverless objects | ||
to manage durable consistent state and state-manipulating logic. | ||
```shell | ||
./gradlew -PmainClass=virtual_objects.GreeterObjectKt run | ||
``` | ||
|
||
* **[Kafka Event-processing](events_processing/UserUpdatesService.java):** Processing events to | ||
update various downstream systems with durable event handlers, event-delaying, | ||
in a strict-per-key order. | ||
```shell | ||
./gradlew -PmainClass=events_processing.UserUpdatesServiceKt run | ||
``` | ||
|
||
* **[Stateful Event-processing](events_state/ProfileService.java):** Populating state from | ||
events and making is queryable via RPC handlers. | ||
```shell | ||
./gradlew -PmainClass=events_state.ProfileServiceKt run | ||
``` | ||
|
||
|
||
### Running the examples | ||
|
||
1. Start Restate Server in a separate shell: `npx restate-server` | ||
|
||
2. Start the relevant example. The commands are listed above for each example. | ||
|
||
3. Register the example at Restate server by calling | ||
`npx restate -y deployment register --force localhost:9080`. | ||
|
||
_Note: the '--force' flag here is to circumvent all checks related to graceful upgrades, because it is only a playground, not a production setup._ | ||
|
||
4. Check the comments in the example for how to interact with the example. | ||
|
||
**NOTE:** When you get an error of the type `{"code":"not_found","message":"Service 'greeter' not found. ...}`, then you forgot step (3) for that example. |
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,45 @@ | ||
plugins { | ||
application | ||
kotlin("jvm") version "2.0.0" | ||
// Kotlinx serialization (optional) | ||
kotlin("plugin.serialization") version "2.0.0" | ||
|
||
id("com.google.devtools.ksp") version "2.0.0-1.0.21" | ||
} | ||
|
||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
val restateVersion = "1.0.1" | ||
|
||
dependencies { | ||
// Annotation processor | ||
ksp("dev.restate:sdk-api-kotlin-gen:$restateVersion") | ||
|
||
// Restate SDK | ||
implementation("dev.restate:sdk-api-kotlin:$restateVersion") | ||
implementation("dev.restate:sdk-http-vertx:$restateVersion") | ||
|
||
// Logging (optional) | ||
implementation("org.apache.logging.log4j:log4j-core:2.23.0") | ||
|
||
// Kotlinx serialization (optional) | ||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2") | ||
} | ||
|
||
// Setup Java/Kotlin compiler target | ||
java { | ||
toolchain { | ||
languageVersion.set(JavaLanguageVersion.of(17)) | ||
} | ||
} | ||
|
||
// Set main class | ||
application { | ||
if (project.hasProperty("mainClass")) { | ||
mainClass.set(project.property("mainClass") as String) | ||
} else { | ||
mainClass.set("durable_execution.RoleUpdateServiceKt") | ||
} | ||
} |
Binary file not shown.
7 changes: 7 additions & 0 deletions
7
basics/basics-kotlin/gradle/wrapper/gradle-wrapper.properties
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,7 @@ | ||
distributionBase=GRADLE_USER_HOME | ||
distributionPath=wrapper/dists | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip | ||
networkTimeout=10000 | ||
validateDistributionUrl=true | ||
zipStoreBase=GRADLE_USER_HOME | ||
zipStorePath=wrapper/dists |
Oops, something went wrong.