blob: e0e39c4c984f178c91c77c07941e9f1309c05d3f [file] [log] [blame] [view]
# Temperature Conversion Service
## Description
This example contains a workflow that performs two consecutive REST invocations defined as functions.
The workflow is described using JSON format as defined in the
[CNCF Serverless Workflow specification](https://github.com/cncf/wg-serverless/tree/main/workflow/spec).
The workflow expects a JSON input containing the temperature in Fahrenheits:
```json
{
"fahrenheit": 100
}
```
The workflow starts defining the constants to be used during the computation.
Then it will call a sequence of REST functions to solve the equation: `Celsius = (Fahrenheit - 32) * 0.5553`.
Finally, the result will be returned to the caller, the final product of the equation is the temperature converted to Celsius.
## Installing and Running
### Prerequisites
You will need:
- Java 17+ installed
- Environment variable `JAVA_HOME` set accordingly
- Maven 3.9.6+ installed
When using native image compilation, you will also need:
- [GraalVm](https://www.graalvm.org/downloads/) 20.2.0+ installed
- Environment variable `GRAALVM_HOME` set accordingly
- Note that GraalVM native image compilation typically requires other packages (glibc-devel, zlib-devel and gcc) to be installed too. You also need 'native-image' installed in GraalVM (using 'gu install native-image'). Please refer to [GraalVM installation documentation](https://www.graalvm.org/docs/reference-manual/aot-compilation/#prerequisites) for more details.
### Compile and Run in Local Dev Mode
```bash
mvn clean package quarkus:dev
```
### Compile and Run in JVM mode
```bash
mvn clean package
java -jar target/quarkus-app/quarkus-run.jar
```
or on Windows
```bash
mvn clean package
java -jar target\quarkus-app\quarkus-run.jar
```
### Compile and Run using Local Native Image
Note that this requires `GRAALVM_HOME` to point to a valid GraalVM installation
```bash
mvn clean package -Pnative
```
To run the generated native executable, generated in `target/`, execute
```bash
./target/conversion-workflow-runner
```
### Submit a request
Before submitting a request, run the [Subtraction](../subtraction-service) and [Multiplication](../multiplication-service) on separate terminals
on ports `8181` and `8282` respectively (use the property `quarkus.http.port`).
The service based on the JSON workflow definition can be access by sending a POST request to [http://localhost:8080/fahrenheit_to_celsius](http://localhost:8080/fahrenheit_to_celsius) with the following content:
```json
{
"workflowdata": {
"fahrenheit": 100
}
}
```
Complete curl command can be found below:
```bash
curl -X POST \
-H 'Content-Type:application/json' \
-H 'Accept:application/json' \
-d '{"fahrenheit": 100}' \
http://localhost:8080/fahrenheit_to_celsius | jq .
```
You should have a reply similar to this one:
```json
{
"id": "2287167f-1392-480e-8e20-6acd5922dfac",
"workflowdata": {
"fahrenheit": 100,
"subtractValue": "32.0",
"multiplyValue": "0.5556",
"difference": 68.0,
"product": 37.7808
}
}
}
```