blob: 032de8293f4389d8ba373f0e1f8468eb77e46def [file] [log] [blame]
<!doctype html>
<!--
Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
-->
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<!-- begin SEO -->
<title>Data consistency solution - Apache ServiceComb</title>
<meta name="description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
<meta name="author" content="">
<meta property="og:locale" content="en">
<meta property="og:site_name" content="Apache ServiceComb">
<meta property="og:title" content="Data consistency solution">
<link rel="canonical" href="https://github.com/pages/apache/incubator-servicecomb-website/docs/products/pack/dataconsistency/">
<meta property="og:url" content="https://github.com/pages/apache/incubator-servicecomb-website/docs/products/pack/dataconsistency/">
<meta property="og:description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
<meta name="twitter:site" content="@ServiceComb">
<meta name="twitter:title" content="Data consistency solution">
<meta name="twitter:description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
<meta name="twitter:url" content="">
<meta name="twitter:card" content="summary">
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "Person",
"name" : "Apache ServiceComb",
"url" : "https://github.com/pages/apache/incubator-servicecomb-website",
"sameAs" : null
}
</script>
<meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
<!-- end SEO -->
<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache ServiceComb Feed">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
<script src="/assets/vendor/prism/prism.js"></script>
<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
<!-- For all browsers -->
<link rel="stylesheet" href="/assets/css/main.css?v=1">
<link rel="stylesheet" href="/assets/vendor/prism/prism.css?v=1">
<!--[if lte IE 9]>
<style>
/* old IE unsupported flexbox fixes */
.greedy-nav .site-title {
padding-right: 3em;
}
.greedy-nav button {
position: absolute;
top: 0;
right: 0;
height: 100%;
}
</style>
<![endif]-->
<meta http-equiv="cleartype" content="on">
<!-- start custom head snippets -->
<!-- insert favicons. use http://realfavicongenerator.net/ -->
<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
<script src="/assets/js/custom.js"></script>
<!-- end custom head snippets -->
</head>
<body class="layout--single">
<!--[if lt IE 9]>
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<div class="masthead" onmouseleave="$('#childrenShow').css('display', 'none')">
<div class="masthead__inner-wrap">
<div class="masthead__menu">
<nav id="site-nav" class="greedy-nav">
<a class="site-title active" href="/"><img src="https://www.apache.org/img/servicecomb.png"></a>
<ul class="visible-links">
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/">Home</a>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/developers/">Projects</a>
</li>
<li class="def-nav-li" onmouseenter="$('#childrenShow').css('display', 'block')">
<a href="/docs/users/">Documentation</a>
<ul id="childrenShow" class="def-children-show-en" onmouseleave="$('#childrenShow').css('display', 'none')">
<li><a href="/docs/getting-started/" class="">Getting started</a></li>
<li><a href="/docs/users/" class="">Docs</a></li>
<li><a href="/slides/" class="">Video</a></li>
<li><a href="/faqs/" class="">FAQ</a></li>
</ul>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/developers/contributing">Community</a>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/year-archive/">Blogs</a>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/release/">Downloads</a>
</li>
</ul>
<button><div class="navicon"></div></button>
<ul class="hidden-links hidden"></ul>
<div class="nav-lang">
<a href=/cn/docs/products/pack/dataconsistency/>中文</a>
</div>
</nav>
</div>
</div>
</div>
<div id="main" role="main">
<div class="sidebar sticky">
<div class="back-to-home"><a href="/">Home</a> > Data consistency solution</div>
<nav class="nav__list">
<input id="ac-toc" name="accordion-toc" type="checkbox" />
<label for="ac-toc">Toggle Menu</label>
<ul class="nav__items">
<li>
<a href="/docs/getting-started/"><span class="nav__sub-title nav__sub-title-with-url">Getting Started</span></a>
</li>
<li>
<span class="nav__sub-title">Service Center</span>
<ul>
<li><a href="/docs/products/service-center/install/" class="">Install</a></li>
<li><a href="/docs/products/service-center/registration-discovery/" class="">Registration&Discovery</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Java Chassis</span>
<ul>
<li><a href="/docs/products/java-chassis/quick-start/" class="">getting started</a></li>
<li><a href="/docs/products/java-chassis/bmi/" class="">Develop microservice application in minutes</a></li>
<li><a href="/docs/products/java-chassis/advance/" class="">Advance microservice development</a></li>
<li><a href="/docs/products/java-chassis/load-balance/" class="">Load Balance</a></li>
<li><a href="/docs/products/java-chassis/flow-control/" class="">Flow Control</a></li>
<li><a href="/docs/products/java-chassis/service-management/" class="">Service Management</a></li>
<li><a href="/docs/products/java-chassis/distributed-tracing/" class="">Distributed Tracing</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Mesher</span>
<ul>
<li><a href="/docs/products/mesher/quick-start/" class="">getting started</a></li>
<li><a href="/docs/products/mesher/advance/" class="">mesher Advance</a></li>
<li><a href="/docs/products/mesher/load-balance/" class="">mesher balance</a></li>
<li><a href="/docs/products/mesher/flow-control/" class="">mesher Flow Control</a></li>
<li><a href="/docs/products/mesher/service-management/" class="">mesher Service Management</a></li>
<li><a href="/docs/products/mesher/distributed-tracing/" class="">mesher Distributed Tracing</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Toolkit</span>
<ul>
<li><a href="/docs/products/toolkit/quick-start/" class="">Quick Start</a></li>
<li><a href="/docs/products/toolkit/oas-validator/" class="">OpenAPI V3 Spec validation tools</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Syncer</span>
<ul>
<li><a href="/docs/products/syncer/quick-start/" class="">Quick Start</a></li>
<li><a href="/docs/products/syncer/multi-servicecenters/" class="">Different service centers communicate with each other</a></li>
</ul>
</li>
</ul>
</nav>
</div>
<article class="page" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="headline" content="Data consistency solution">
<meta itemprop="description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
<meta itemprop="dateModified" content="September 03, 2017">
<div class="page__inner-wrap">
<header>
<h1 class="page__title" itemprop="headline">Data consistency solution
</h1>
</header>
<section class="page__content" itemprop="text">
<aside class="sidebar__right">
<nav class="toc">
<!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
<ul class="toc__menu" id="markdown-toc">
<li><a href="#running-demo" id="markdown-toc-running-demo">Running Demo</a></li>
<li><a href="#verify-services" id="markdown-toc-verify-services">Verify services</a></li>
<li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
</ul>
</nav>
</aside>
<p>This demo shows you how to use the Saga solution provided by ServiceComb to ensure the microservice for data consistency.</p>
<p>With microservice architecture, each of the services may have its own database technology and it’s not feasible to ensure all transactions on these services are either committed or rolled back with database. In this demo, we make use of Saga to ensure eventual data consistency among services, the payment is only executed after car rental, flight booking, and hotel-reservation are completed.</p>
<p>Travel application demo including four services</p>
<ul>
<li>flight booking service</li>
<li>car rental service</li>
<li>hotel reservation service</li>
<li>payment service</li>
</ul>
<p><img src="/assets/images/saga-demo.png" alt="Saga-demo" /></p>
<h2 id="running-demo">Running Demo</h2>
<p>Note, demo is in the <a href="https://github.com/apache/servicecomb-saga">ServiceComb-Saga</a> project.</p>
<ol>
<li>Prerequisites
<ul>
<li><a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html">Oracle JDK 1.8</a></li>
<li><a href="https://maven.apache.org/install.html">Maven 3.x</a></li>
<li><a href="https://www.docker.com/get-docker">Docker</a></li>
<li><a href="https://dev.mysql.com/downloads/">MySQL</a></li>
<li><a href="https://github.com/apache/servicecomb-service-center">Service Center</a></li>
<li><a href="https://docs.docker.com/compose/install/">Docker compose</a></li>
</ul>
</li>
<li>
<p>Configuration
Set service center address of each microservice in <em>microservice.yaml</em> file</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="na">APPLICATION_ID</span><span class="pi">:</span> <span class="s">saga</span>
<span class="na">service_description</span><span class="pi">:</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">flight-booking-service</span>
<span class="na">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
<span class="na">servicecomb</span><span class="pi">:</span>
<span class="na">service</span><span class="pi">:</span>
<span class="na">registry</span><span class="pi">:</span>
<span class="na">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span> <span class="c1">#choose Service Center provided by ServiceComb</span>
<span class="na">rest</span><span class="pi">:</span>
<span class="na">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
<span class="na">handler</span><span class="pi">:</span>
<span class="na">chain</span><span class="pi">:</span>
<span class="na">Consumer</span><span class="pi">:</span>
<span class="na">default</span><span class="pi">:</span> <span class="s">loadbalance</span>
</code></pre></div> </div>
<p>Set deployment script in <em>saga-demo/docker-compose.yaml</em> file</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="na">version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">2.1'</span>
<span class="na">services</span><span class="pi">:</span>
<span class="na">service-center</span><span class="pi">:</span> <span class="c1">#choose Service Center image provided by ServiceComb</span>
<span class="na">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">servicecomb/service-center"</span>
<span class="na">hostname</span><span class="pi">:</span> <span class="s">service-center</span>
<span class="na">ports</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">30100:30100"</span>
<span class="na">mysql</span><span class="pi">:</span> <span class="c1">#choose mysql image with 5.7 version</span>
<span class="na">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">mysql/mysql-server:5.7"</span>
<span class="na">hostname</span><span class="pi">:</span> <span class="s">mysql</span>
<span class="na">environment</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">MYSQL_ROOT_PASSWORD=password</span>
<span class="pi">-</span> <span class="s">MYSQL_DATABASE=saga</span>
<span class="pi">-</span> <span class="s">MYSQL_USER=saga</span>
<span class="pi">-</span> <span class="s">MYSQL_PASSWORD=password</span>
<span class="na">ports</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">3306:3306"</span>
<span class="na">healthcheck</span><span class="pi">:</span>
<span class="na">test</span><span class="pi">:</span> <span class="pi">[</span><span class="s2">"</span><span class="s">CMD-SHELL"</span><span class="pi">,</span> <span class="s2">"</span><span class="s">nc</span><span class="nv"> </span><span class="s">-z</span><span class="nv"> </span><span class="s">localhost</span><span class="nv"> </span><span class="s">3306</span><span class="nv"> </span><span class="s">&amp;&gt;</span><span class="nv"> </span><span class="s">/dev/null;</span><span class="nv"> </span><span class="s">echo</span><span class="nv"> </span><span class="s">$$?"</span><span class="pi">]</span>
<span class="na">interval</span><span class="pi">:</span> <span class="s">30s</span>
<span class="na">timeout</span><span class="pi">:</span> <span class="s">10s</span>
<span class="na">retries</span><span class="pi">:</span> <span class="m">5</span>
<span class="na">car-rental-service</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">car-rental-service:0.0.2-SNAPSHOT"</span>
<span class="na">hostname</span><span class="pi">:</span> <span class="s">car</span>
<span class="na">links</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
<span class="na">ports</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">8080:8080"</span>
<span class="na">flight-booking-service</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">flight-booking-service:0.0.2-SNAPSHOT"</span>
<span class="na">hostname</span><span class="pi">:</span> <span class="s">flight</span>
<span class="na">links</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
<span class="na">ports</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">8081:8080"</span>
<span class="na">hotel-reservation-service</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">hotel-reservation-service:0.0.2-SNAPSHOT"</span>
<span class="na">hostname</span><span class="pi">:</span> <span class="s">hotel</span>
<span class="na">links</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
<span class="na">ports</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">8082:8080"</span>
<span class="na">payment-service</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">payment-service:0.0.2-SNAPSHOT"</span>
<span class="na">hostname</span><span class="pi">:</span> <span class="s">payment</span>
<span class="na">links</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
<span class="na">ports</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">8080"</span>
<span class="na">saga</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">saga-spring:0.0.2-SNAPSHOT"</span>
<span class="na">hostname</span><span class="pi">:</span> <span class="s">saga</span>
<span class="na">links</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">mysql:mysql.servicecomb.io"</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">car-rental-service:car.servicecomb.io"</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">flight-booking-service:flight.servicecomb.io"</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">hotel-reservation-service:hotel.servicecomb.io"</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">payment-service:payment.servicecomb.io"</span>
<span class="na">environment</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">JAVA_OPTS=-Dspring.profiles.active=prd,servicecomb -Dcse.service.registry.address=http://sc.servicecomb.io:30100</span>
<span class="na">ports</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s2">"</span><span class="s">8083:8080"</span>
<span class="na">depends_on</span><span class="pi">:</span>
<span class="na">mysql</span><span class="pi">:</span>
<span class="na">condition</span><span class="pi">:</span> <span class="s">service_healthy</span>
</code></pre></div> </div>
</li>
<li>
<p>Run the following command to create docker images in saga project root folder</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> mvn package <span class="nt">-DskipTests</span> <span class="nt">-Pdocker</span> <span class="nt">-Pdemo</span>
</code></pre></div> </div>
</li>
<li>
<p>Start application up in saga/saga-demo/ with the following command</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> docker-compose up
</code></pre></div> </div>
</li>
</ol>
<h2 id="verify-services">Verify services</h2>
<ol>
<li>
<p>Use <a href="https://github.com/apache/servicecomb-saga/blob/master/docs/api/api.md">Saga API</a> to set request content and save it to <em>request.json</em></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"policy"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BackwardRecovery"</span><span class="p">,</span><span class="w">
</span><span class="nl">"requests"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-car"</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
</span><span class="nl">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"car-rental-service"</span><span class="p">,</span><span class="w">
</span><span class="nl">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/rentals"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/rentals"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-hotel"</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
</span><span class="nl">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hotel-reservation-service"</span><span class="p">,</span><span class="w">
</span><span class="nl">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/reservations"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/reservations"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-flight"</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
</span><span class="nl">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"flight-booking-service"</span><span class="p">,</span><span class="w">
</span><span class="nl">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/bookings"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/bookings"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-payment"</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
</span><span class="nl">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payment-service"</span><span class="p">,</span><span class="w">
</span><span class="nl">"parents"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="s2">"request-car"</span><span class="p">,</span><span class="w">
</span><span class="s2">"request-flight"</span><span class="p">,</span><span class="w">
</span><span class="s2">"request-hotel"</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="nl">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/payments"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/payments"</span><span class="p">,</span><span class="w">
</span><span class="nl">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
<li>
<p>Set content type to <em>text/plain</em>, and send <em>request.json</em> to Saga</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> curl <span class="nt">-XPOST</span> <span class="nt">-H</span> <span class="s2">"Content-Type: text/plain"</span> <span class="nt">-d</span> @./request.json http://&lt;localhost.ip:8083&gt;/requests
</code></pre></div> </div>
<p>Response(return “success” if execution successfully, otherwise return failed with error info)</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> success
</code></pre></div> </div>
</li>
<li>
<p>Get all the Saga events</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> curl <span class="nt">-XGET</span> http://&lt;localhost.ip:8083&gt;/events
</code></pre></div> </div>
<p>Response</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="o">{</span>
<span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>: <span class="o">[</span>
<span class="o">{</span>
<span class="s2">"id"</span>: 1,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"SagaStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">policy</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">BackwardRecovery</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">requests</span><span class="se">\"</span><span class="s2">: [{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}]}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 2,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 3,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 4,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 5,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:22Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Flight booked with id f249543b-765e-4e10-9ba3-74fe33d8af83 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 6,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:24Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Hotel reserved with id f74049a0-3d3d-49b6-a45b-058a409daecf for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 7,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Car rented with id 937d7364-be07-4d47-9e01-af72290d0478 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 8,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 9,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Payment made for customer mike and remaining balance is 200</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 10,
<span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"SagaEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{}"</span>
<span class="o">}</span>
<span class="o">]</span>
<span class="o">}</span>
</code></pre></div> </div>
</li>
<li>
<p>Sending the request more than once will trigger compensation due to insufficient account balance in payment-service.Do this implement and get Saga events, you can find compensation events in Saga log.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="o">{</span>
<span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>: <span class="o">[</span>
...
<span class="o">]</span>,
<span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>: <span class="o">[</span>
<span class="o">{</span>
<span class="s2">"id"</span>: 11,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"SagaStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">policy</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">BackwardRecovery</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">requests</span><span class="se">\"</span><span class="s2">: [{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}]}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 12,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 13,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 14,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 15,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Car rented with id 75f4be4b-0d32-4bbb-b786-7b39c340682a for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 16,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Hotel reserved with id 7ad11c00-25eb-4b4b-b1fb-b55d4e833f51 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 17,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Flight booked with id 1a40d7bf-ee66-46d1-b066-a9973f15176a for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 18,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 19,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:31:15Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionAbortedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">body</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">org.apache.servicecomb.saga.core.TransactionFailedException: The remote service payment-service failed to serve the post request to /payments </span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.discovery.service.center.ServiceCenterDiscoveryRestTransport.with(ServiceCenterDiscoveryRestTransport.java:81)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.format.JacksonRestOperation.send(JacksonRestOperation.java:43)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.format.JacksonRestTransaction.send(JacksonRestTransaction.java:24)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.core.RequestProcessTask.commit(RequestProcessTask.java:45)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.core.BackwardRecovery.apply(BackwardRecovery.java:33)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.core.LoggingRecoveryPolicy.apply(LoggingRecoveryPolicy.java:38)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.core.TransactionTaskConsumer</span><span class="nv">$OperationCallable</span><span class="s2">.call(TransactionTaskConsumer.java:110)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.saga.core.TransactionTaskConsumer</span><span class="nv">$OperationCallable</span><span class="s2">.call(TransactionTaskConsumer.java:94)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat java.util.concurrent.FutureTask.run(FutureTask.java:266)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat java.util.concurrent.Executors</span><span class="nv">$RunnableAdapter</span><span class="s2">.call(Executors.java:511)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat java.util.concurrent.FutureTask.run(FutureTask.java:266)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat java.util.concurrent.ThreadPoolExecutor</span><span class="nv">$Worker</span><span class="s2">.run(ThreadPoolExecutor.java:617)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat java.lang.Thread.run(Thread.java:748)</span><span class="se">\\</span><span class="s2">nCaused by: InvocationException: code=490;msg=CommonExceptionData [message=Cse Internal Bad Request]</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.doCreate(ExceptionFactory.java:74)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.convertException(ExceptionFactory.java:119)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.convertConsumerException(ExceptionFactory.java:78)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.swagger.invocation.Response.createConsumerFail(Response.java:128)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.swagger.invocation.Response.createFail(Response.java:121)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.swagger.invocation.AsyncResponse.fail(AsyncResponse.java:41)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat org.apache.servicecomb.transport.rest.client.http.VertxHttpMethod.lambda</span><span class="nv">$doMethod$0</span><span class="s2">(VertxHttpMethod.java:67)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.http.impl.HttpClientRequestBase.handleException(HttpClientRequestBase.java:110)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.http.impl.HttpClientRequestImpl.handleException(HttpClientRequestImpl.java:50)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.http.impl.HttpClientRequestBase.timeout(HttpClientRequestBase.java:155)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.http.impl.HttpClientRequestBase.handleTimeout(HttpClientRequestBase.java:140)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.http.impl.HttpClientRequestBase.lambda</span><span class="nv">$setTimeout$0</span><span class="s2">(HttpClientRequestBase.java:100)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.impl.VertxImpl</span><span class="nv">$InternalTimerHandler</span><span class="s2">.handle(VertxImpl.java:782)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.impl.VertxImpl</span><span class="nv">$InternalTimerHandler</span><span class="s2">.handle(VertxImpl.java:753)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.vertx.core.impl.ContextImpl.lambda</span><span class="nv">$wrapTask$2</span><span class="s2">(ContextImpl.java:316)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:418)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:440)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">tat io.netty.util.concurrent.SingleThreadEventExecutor</span><span class="nv">$5</span><span class="s2">.run(SingleThreadEventExecutor.java:873)</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">t... 1 more</span><span class="se">\\</span><span class="s2">nCaused by: java.util.concurrent.TimeoutException: The timeout period of 30000ms has been exceeded</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\</span><span class="s2">t... 11 more</span><span class="se">\\</span><span class="s2">n</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 20,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:31:15Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionCompensatedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Car rental cancelled with id 38bc5913-6768-4321-add3-6d26db364c19 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 21,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:31:15Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionCompensatedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Hotel reservation cancelled with id efcff718-fb74-4b70-a2e2-689ecb42206d for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 22,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:31:15Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"TransactionCompensatedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Flight booking cancelled with id 37572464-6f53-4351-aa37-5f88e3f1f872 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
<span class="o">}</span>,
<span class="o">{</span>
<span class="s2">"id"</span>: 23,
<span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
<span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:31:15Z"</span>,
<span class="s2">"type"</span>: <span class="s2">"SagaEndedEvent"</span>,
<span class="s2">"contentJson"</span>: <span class="s2">"{}"</span>
<span class="o">}</span>
<span class="o">]</span>
<span class="o">}</span>
</code></pre></div> </div>
</li>
</ol>
<h2 id="whats-next">What’s next</h2>
<ul>
<li>
<p>Learn more from <a href="/docs/distributed_saga_1/">Eventual Data Consistency Solution in ServiceComb - part 1</a></p>
</li>
<li>
<p>Learn more from <a href="/docs/distributed_saga_2/">Eventual Data Consistency Solution in ServiceComb - part 2</a></p>
</li>
<li>
<p>Learn more from <a href="/docs/distributed_saga_3/">Eventual Data Consistency Solution in ServiceComb - part 3</a></p>
</li>
</ul>
</section>
<footer class="page__meta">
</footer>
</div>
</article>
</div>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<div align="center" style="margin: 0 0;">
<ins class="adsbygoogle"
style="display:block; border-bottom: initial;"
data-ad-client="ca-pub-7328585512091257"
data-ad-slot="3049671934"
data-ad-format="auto"></ins>
</div>
<div class="page__footer">
<footer>
<!-- start custom footer snippets -->
<!-- end custom footer snippets -->
<div class="container">
<div class="row justify-content-md-center">
<div class="col">
<ul>
<p class="header">Resources</p>
<li><a href="/docs/getting-started/">Getting started</a></li>
<li><a href="/docs/users/">User Guide</a></li>
<li><a href="/slides/">Slides</a></li>
<li><a href="/users/faq/">Common Questions</a></li>
</ul>
</div>
<div class="col">
<ul>
<p class="header">ASF</p>
<li><a href="http://www.apache.org">Foundation</a></li>
<li><a href="http://www.apache.org/licenses/">License</a></li>
<li><a href="http://www.apache.org/events/current-event">Events</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</div>
<div class="col">
<ul>
<p class="header">Contribute</p>
<li><a href="http://issues.apache.org/jira/browse/SCB">Report a Doc Issue</a></li>
<li><a href="https://github.com/apache/servicecomb-website/edit/master/_docs/products/pack/dataconsistency.md">Edit This Page on Github</a></li>
<li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
<li><a href="/security">Security</a></li>
</ul>
</div>
<div class="col">
<ul class="social-icons">
<p class="header">Community</p>
<li>
<a href="mailto:dev-subscribe@servicecomb.incubator.apache.org" rel="nofollow"><span class="mail">Mailing List</span></a>
</li>
<li>
<a href="https://github.com/apache?q=ServiceComb" target="_blank"><span class="github">Github</span></a>
</li>
<li>
<a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
</li>
<li>
<a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
</li>
</ul>
</div>
</div>
</div>
<div class="page__footer-bottom">
<div>&copy; 2019 Apache ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
<div>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
</div>
</footer>
</div>
<script src="/assets/js/main.min.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-101622733-1', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>