This is a simple example of a stateful functions application implemented in Python
.
In this example, we imagine a service that computes personalized greetings. Our service, consist out of the following components:
playground ingress
- Ingestion point for messages. Messages are sent to the specified target function.
person
- This function is triggered by the ingress defined above. This function keeps track of the number of visits, and triggers the next functions:
greeter
- This function, computes a personalized greeting, based on the name and the number of visits of that user. The output of that computation is forward to a Kafka egress defined below.
playground egress
- Queryable endpoint that collects the emitted greetings in the greetings
topic. The greeting is utf-8
encoded.
$ docker-compose build $ docker-compose up
The greeter application allows you to do the following actions:
GreetRequest
message to the person
functionIn order to send messages to the Stateful Functions application you can run:
$ curl -X PUT -H "Content-Type: application/vnd.example/GreetRequest" -d '{"name": "Bob"}' localhost:8090/example/person/Bob
To consume the customized greeting, as they appear in the greetings
playground topic, run in a separate terminal:
$ curl -X GET localhost:8091/greetings
The messages are expected to be encoded as JSON.
GreetRequest
: {"name": "Bob"}
, name
is the id of the person
functionFeeling curious? add the following print to the person
function at functions.py:
print(f"Hello there {context.address.id}!", flush=True)
Then, rebuild and restart only the functions
service.
docker-compose build functions docker-compose up functions