The purpose of this application is to show how to build a simple event-driven application on top of Apache Pulsar. This application is written in functional Scala with Tagless Final style and ZIO Task is used as the main effect. You can find detailed description of the app in the blog post - https://scala.monster/train-station/
In order to run unit tests:
sbt testThis repository contains a docker-compose file, which includes 4 services:
- Apache Pulsar
- Zurich train station
- Bern train station
- Geneva train station
First, build a docker image of the service by running command:
sbt docker:publishLocalWhen you have successfully built docker images you can start environment:
docker-compose up -dThis will start all the services in the background. All train stations will connect to Apache Pulsar.
Services are starting much faster than Apache Pulsar so they will retry until it is ready.
A train station service is ready when you see a similar log message:
[2020-09-30T19:10:52.064Z] Started train station Bern
To test if services are working correctly you can send a Departure request:
curl --request POST \
--url http://localhost:8082/departure \
--header 'content-type: application/json' \
--data '{
"id": "123",
"to": "Bern",
"time": "2020-12-03T10:15:30.00Z",
"actual": "2020-12-03T10:15:30.00Z"
}'
This will create a departing train from Zurich to Bern. In order to mark train as arrived send another HTTP request:
curl --request POST \
--url http://localhost:8081/arrival \
--header 'content-type: application/json' \
--data '{
"trainId": "123",
"time": "2020-12-03T10:15:30.00Z"
}'