http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-dataconsistency/index.html ---------------------------------------------------------------------- diff --git a/content/cn/docs/quick-start-dataconsistency/index.html b/content/cn/docs/quick-start-dataconsistency/index.html new file mode 100644 index 0000000..b46d53e --- /dev/null +++ b/content/cn/docs/quick-start-dataconsistency/index.html @@ -0,0 +1,951 @@ +<!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="cn" class="no-js"> + <head> + <meta charset="utf-8"> + +<!-- begin SEO --> + + + + + + + + + +<title>æ°æ®ä¸è´æ§è§£å³æ¹æ¡ - Apache incubator ServiceComb</title> + + + + +<meta name="description" content="ä»ç»ServiceCombçSagaæ°æ®ä¸è´æ§æ¹æ¡åºç¨demo"> + + + + +<meta name="author" content=""> + +<meta property="og:locale" content="cn"> +<meta property="og:site_name" content="Apache incubator ServiceComb"> +<meta property="og:title" content="æ°æ®ä¸è´æ§è§£å³æ¹æ¡"> + + + <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-dataconsistency/"> + <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-dataconsistency/"> + + + + <meta property="og:description" content="ä»ç»ServiceCombçSagaæ°æ®ä¸è´æ§æ¹æ¡åºç¨demo"> + + + + <meta name="twitter:site" content="@ServiceComb"> + <meta name="twitter:title" content="æ°æ®ä¸è´æ§è§£å³æ¹æ¡"> + <meta name="twitter:description" content="ä»ç»ServiceCombçSagaæ°æ®ä¸è´æ§æ¹æ¡åºç¨demo"> + <meta name="twitter:url" content=""> + + + <meta name="twitter:card" content="summary"> + + + + + + + + + + + + + + + + + + + + + + + <script type="application/ld+json"> + { + "@context" : "http://schema.org", + "@type" : "Person", + "name" : "Apache incubator ServiceComb", + "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io", + "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 incubator 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/js/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"> +<link rel="stylesheet" href="/assets/css/prism.css"> + +<!--[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"> + <div class="masthead__inner-wrap"> + <div class="masthead__menu"> + <nav id="site-nav" class="greedy-nav"> + + <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a> + + <ul class="visible-links"> + + + <li class="masthead__menu-item"> + + + + <a class="active" href="/cn/docs/quick-start/">å¿«éå ¥é¨</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/users/">ç¨æ·æå</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/developers/">å¼åè æå</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/year-archive/">åæ</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/faqs/">常è§é®é¢</a> + + </li> + + </ul> + <button><div class="navicon"></div></button> + <ul class="hidden-links hidden"></ul> + <div class="nav-lang"> + + + + <a href=/docs/quick-start-dataconsistency/>English</a> + + </div> + </nav> + </div> + </div> +</div> + + + + + + +<div id="main" role="main"> + + <div class="sidebar sticky"> + + <div class="back-to-home">é¦é¡µ > <a href="/cn/">ServiceComb</a></div> + + + + + + + + + + + +<nav class="nav__list"> + + <input id="ac-toc" name="accordion-toc" type="checkbox" /> + <label for="ac-toc">åæ¢èå</label> + <ul class="nav__items"> + + <li> + + + + + <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">å¿«éå ¥é¨</span></a> + + + + </li> + + <li> + + + + + <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">å¾®æå¡åºç¨å¿«éå¼å</span></a> + + + + </li> + + <li> + + + + + <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">å¾®æå¡å¼åè¿é¶</span></a> + + + + <ul> + + + + + + + + <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">è´è½½åè¡¡</a></li> + + + + + + + + <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">æµéæ§å¶</a></li> + + + + + + + + <li><a href="/cn/docs/quick-start-advance/service-management/" class="">æå¡æ²»ç</a></li> + + + + + + + + <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">åå¸å¼è°ç¨é¾è¿½è¸ª</a></li> + + </ul> + + </li> + + <li> + + + + + <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">æ°æ®ä¸è´æ§è§£å³æ¹æ¡</span></a> + + + + </li> + + </ul> +</nav> + + + + </div> + + + + <article class="page" itemscope itemtype="http://schema.org/CreativeWork"> + <meta itemprop="headline" content="æ°æ®ä¸è´æ§è§£å³æ¹æ¡"> + <meta itemprop="description" content="ä»ç»ServiceCombçSagaæ°æ®ä¸è´æ§æ¹æ¡åºç¨demo"> + + <meta itemprop="dateModified" content="September 19, 2017"> + + <div class="page__inner-wrap"> + + + <header> + <h1 class="page__title" itemprop="headline">æ°æ®ä¸è´æ§è§£å³æ¹æ¡ +</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> å¨æ¬é¡µä¸</h4></header> --> +<ul class="toc__menu" id="markdown-toc"> + <li><a href="#è¿è¡demo" id="markdown-toc-è¿è¡demo">è¿è¡demo</a></li> + <li><a href="#éªè¯" id="markdown-toc-éªè¯">éªè¯</a></li> + <li><a href="#ä¸ä¸æ¥" id="markdown-toc-ä¸ä¸æ¥">ä¸ä¸æ¥</a></li> +</ul> + + </nav> +</aside> + +<p>模æä¸ä¸ªç®åçæ è¡åºç¨ï¼å±ç¤ºå¦ä½ä½¿ç¨ServiceCombæä¾çSagaæ¹æ¡ä¿è¯å¾®æå¡é´æ°æ®ä¸è´æ§ã</p> + +<p>æ è¡åºç¨å å«å个微æå¡ï¼</p> +<ul> + <li>æºç¥¨é¢è®¢æå¡(flight-booking-service)</li> + <li>ç§è½¦æå¡(car-rental-service)</li> + <li>é åºé¢è®¢æå¡(hotel-reservation-service)</li> + <li>æ¯ä»æå¡(payment-service)</li> +</ul> + +<p>æºç¥¨é¢è®¢ãç§è½¦ãé åºé¢è®¢æå¡é´æ ä¾èµå ³ç³»ï¼ä½¿ç¨èªå·±çæ°æ®åºï¼éè¿HTTPåè®®éä¿¡ã +å¨ä»¥ä¸ä¸ä¸ªæå¡çé¢è®¢æåï¼æ¯ä»å®æåæè½æ»¡è¶³ä¸ä¸ªæåçè¡ç¨ï¼å¦åä¸è½æè¡ï¼Sagaèªå¨è¡¥å¿ã</p> + +<p><img src="/assets/images/saga-demo.png" alt="Saga-demo" /></p> + +<h2 id="è¿è¡demo">è¿è¡demo</h2> + +<p>注ï¼Demo éæå¨ <a href="https://github.com/ServiceComb/ServiceComb-Saga">ServiceComb-Saga</a> 项ç®ä¸ã</p> + +<ol> + <li>åå¤ç¯å¢ + <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/ServiceComb/service-center">Service Center</a></li> + <li><a href="https://docs.docker.com/compose/install/">Docker compose</a></li> + </ul> + </li> + <li> + <p>é ç½®æå¡ + å¨åæå¡ç <em>microservice.yaml</em> æ件ï¼è®¾ç½®è¯¥æå¡æ³¨åçæå¡ä¸å¿</p> + + <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">saga</span> + <span class="s">service_description</span><span class="pi">:</span> + <span class="s">name</span><span class="pi">:</span> <span class="s">flight-booking-service</span> + <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span> + <span class="s">cse</span><span class="pi">:</span> + <span class="s">service</span><span class="pi">:</span> + <span class="s">registry</span><span class="pi">:</span> + <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span> <span class="c1">#æ¤å¤éæ©ä½¿ç¨ServiceCombçService Center</span> + <span class="s">rest</span><span class="pi">:</span> + <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span> + <span class="s">handler</span><span class="pi">:</span> + <span class="s">chain</span><span class="pi">:</span> + <span class="s">Consumer</span><span class="pi">:</span> + <span class="s">default</span><span class="pi">:</span> <span class="s">loadbalance</span> +</code></pre> + </div> + + <p>å¨ <em>saga-demo/docker-compose.yaml</em> 设置é¨ç½²èæ¬</p> + <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">2.1'</span> + + <span class="s">services</span><span class="pi">:</span> + <span class="s">service-center</span><span class="pi">:</span> <span class="c1">#æ¤å¤éæ©ä½¿ç¨ServiceCombçService Center容å¨éå</span> + <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">servicecomb/service-center"</span> + <span class="s">hostname</span><span class="pi">:</span> <span class="s">service-center</span> + <span class="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s2">"</span><span class="s">30100:30100"</span> + + <span class="s">mysql</span><span class="pi">:</span> <span class="c1">#æ¤å¤éæ©ä½¿ç¨5.7çæ¬çmysqléå</span> + <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">mysql/mysql-server:5.7"</span> + <span class="s">hostname</span><span class="pi">:</span> <span class="s">mysql</span> + <span class="s">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="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s2">"</span><span class="s">3306:3306"</span> + <span class="s">healthcheck</span><span class="pi">:</span> + <span class="s">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">&></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="s">interval</span><span class="pi">:</span> <span class="s">30s</span> + <span class="s">timeout</span><span class="pi">:</span> <span class="s">10s</span> + <span class="s">retries</span><span class="pi">:</span> <span class="s">5</span> + + <span class="s">car-rental-service</span><span class="pi">:</span> + <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">car-rental-service:0.0.2-SNAPSHOT"</span> + <span class="s">hostname</span><span class="pi">:</span> <span class="s">car</span> + <span class="s">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="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s2">"</span><span class="s">8080:8080"</span> + + <span class="s">flight-booking-service</span><span class="pi">:</span> + <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">flight-booking-service:0.0.2-SNAPSHOT"</span> + <span class="s">hostname</span><span class="pi">:</span> <span class="s">flight</span> + <span class="s">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="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s2">"</span><span class="s">8081:8080"</span> + + <span class="s">hotel-reservation-service</span><span class="pi">:</span> + <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">hotel-reservation-service:0.0.2-SNAPSHOT"</span> + <span class="s">hostname</span><span class="pi">:</span> <span class="s">hotel</span> + <span class="s">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="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s2">"</span><span class="s">8082:8080"</span> + + <span class="s">payment-service</span><span class="pi">:</span> + <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">payment-service:0.0.2-SNAPSHOT"</span> + <span class="s">hostname</span><span class="pi">:</span> <span class="s">payment</span> + <span class="s">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="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s2">"</span><span class="s">8080"</span> + + <span class="s">saga</span><span class="pi">:</span> + <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">saga-spring:0.0.2-SNAPSHOT"</span> + <span class="s">hostname</span><span class="pi">:</span> <span class="s">saga</span> + <span class="s">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="s">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="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s2">"</span><span class="s">8083:8080"</span> + <span class="s">depends_on</span><span class="pi">:</span> + <span class="s">mysql</span><span class="pi">:</span> + <span class="s">condition</span><span class="pi">:</span> <span class="s">service_healthy</span> +</code></pre> + </div> + </li> + <li> + <p>å¨Saga项ç®çæ ¹ç®å½æ§è¡ç¼è¯ï¼å¶ä½Sagaãæºç¥¨é¢è®¢ãç§è½¦ãé åºé¢è®¢åæ¯ä»æå¡éå</p> + + <div class="language-bash highlighter-rouge"><pre class="highlight"><code> mvn package -DskipTests -Pdocker -Pdemo +</code></pre> + </div> + </li> + <li> + <p>å¨Saga项ç®çsaga-demoç®å½éè¿docker-composeä¸é®å¯å¨Sagaãæºç¥¨é¢è®¢ãç§è½¦ãé åºé¢è®¢åæ¯ä»æå¡</p> + + <div class="language-bash highlighter-rouge"><pre class="highlight"><code> docker-compose up +</code></pre> + </div> + </li> +</ol> + +<h2 id="éªè¯">éªè¯</h2> + +<ol> + <li> + <p>åç § <a href="https://github.com/ServiceComb/ServiceComb-Saga/blob/master/docs/api/api.md">Saga API</a> 说æï¼è®¾å®åæå¡çäºå¡ãè¡¥å¿ãä¾èµåæ¢å¤åæ°ï¼å¹¶ä¿å为 <em>request.json</em> æ件</p> + + <div class="language-json highlighter-rouge"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"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="nt">"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="nt">"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="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"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="nt">"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="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"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="nt">"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="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"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="nt">"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="nt">"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="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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="nt">"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="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> + </span><span class="nt">"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> + </li> + <li> + <p>åé请æ±å°Saga</p> + + <div class="language-bash highlighter-rouge"><pre class="highlight"><code> curl -XPOST -H <span class="s2">"Content-Type: text/plain"</span> -d @./request.json http://<localhost.ip:8083>/requests +</code></pre> + </div> + + <p>è·åå¤çç»ææå(å¦æ失败ï¼è¿åç¸åºçé误信æ¯)</p> + <div class="language-bash highlighter-rouge"><pre class="highlight"><code> success +</code></pre> + </div> + </li> + <li> + <p>æ¥çSagaçäºå¡</p> + + <div class="language-bash highlighter-rouge"><pre class="highlight"><code> curl -XGET http://<localhost.ip:8083>/events +</code></pre> + </div> + + <p>æ¥è¯¢ç»æ</p> + + <div class="language-bash highlighter-rouge"><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">m ike</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">/reservation s</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><s pan 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">\"</s pan><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">serviceNa me</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">c ustomerId</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</spa n><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="s e">\"</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">serviceN ame</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">custome rId</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 cl ass="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</spa n><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</sp an><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 clas s="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</sp an><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 cl ass="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">metho d</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="s e">\\</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> + </li> + <li> + <p>demoä¸æ¨¡æäºæ¯ä»æå¡å¸æ·ä½é¢ä¸è¶³åºæ¯ï¼åé请æ±è¶ è¿ä¸æ¬¡å°è§¦åè¡¥å¿æä½ãå次åé请æ±ï¼å¯ä»¥å¨Sagaæ¥å¿ä¸æ¾å°è¡¥å¿äºä»¶</p> + + <div class="language-bash highlighter-rouge"><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">m ike</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">/reservation s</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><s pan 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">\"</s pan><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">: {
<TRUNCATED>