Creating a custom Spring Cloud Gateway filter that calls a WebAssembly function written in C from a .wasm file using wasmtime-java.
To run the project:
./gradlew bootRun
To call the function:
curl localhost:8081/wasm -H"X-CustomSum-x:10" -H"X-CustomSum-y:16" -sI | grep X-CustomSum
X-CustomSum: 26
This request will call a custom filter that will sum two digits and add it to the response headers:
spring:
cloud:
gateway:
routes:
- uri: https://albertoimpl.com
predicates:
- Path=/wasm
filters:
- StripPrefix=1
- CustomSumWASMFilter
To compile the sum function:
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
emcc sum/sum.c -o sum/sum.js -s EXPORTED_FUNCTIONS='["_sum"]'
cp sum/sum.wasm src/main/resources/