tree: 1ea2cee6cec6d4b8e7ab6f0039e01ba5b54187f0 [path history] [tgz]
  1. Flight.java
  2. lra-coordinator.yaml
  3. Payment.java
  4. Readme.md
  5. Saga.java
  6. Train.java
examples/saga/Readme.md

Saga example

This example is from camel-saga-quickstart adapted to work with camel-k.

Make sure Camel K is installed in your namespace, or execute the following command to install it:

kamel install
  • Start the lra-coordinator by using the oc or kubectl tool:
kubectl apply -f lra-coordinator.yaml
  • Start the three demo services
kamel run -d camel-lra Payment.java
kamel run -d camel-lra Flight.java
kamel run -d camel-lra Train.java
  • Start the saga application
kamel run -d camel-lra Saga.java

Then you can use kamel logs saga to check the output of the transactions.

Focusing on one of the services, e.g. the flight service, you will notice that when unexpected events are found, the operation is subsequently cancelled, e.g.:

E.g. running:

kamel logs flight

Possible workflow:

flight-7c8df48b88-6pzwt integration 2020-03-02 10:56:30.148 INFO  [default-workqueue-2] route2 - Buying flight #18
flight-7c8df48b88-6pzwt integration 2020-03-02 10:56:30.165 ERROR [XNIO-1 I/O-1] DefaultErrorHandler - Failed delivery for (MessageId: ID-flight-7c8df48b88-6pzwt-1583146351094-0-106 on ExchangeId: ID-flight-7c8df48b88-6pzwt-1583146351094-0-105). Exhausted after delivery attempt: 1 caught: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking http://payment/api/pay?bridgeEndpoint=true&type=flight with statusCode: 500
...
# after stacktrace
...
flight-7c8df48b88-6pzwt integration 2020-03-02 10:56:30.256 INFO  [XNIO-2 task-6] route1 - Flight purchase #18 has been cancelled
flight-7c8df48b88-6pzwt integration 2020-03-02 10:56:35.150 INFO  [default-workqueue-3] route2 - Buying flight #19
flight-7c8df48b88-6pzwt integration 2020-03-02 10:56:35.197 INFO  [XNIO-1 I/O-1] route2 - Payment for flight #19 done