{"id":667,"date":"2018-03-07T16:14:32","date_gmt":"2018-03-07T08:14:32","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=667"},"modified":"2018-03-07T16:14:32","modified_gmt":"2018-03-07T08:14:32","slug":"eventuate-example-applications","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=667","title":{"rendered":"Eventuate example applications"},"content":{"rendered":"<p>http:\/\/eventuate.io\/exampleapps.html<\/p>\n<div class=\"row\">\n<div class=\"col-md-6\">\n<p>The Eventuate\u2122 Platform for developing\u00a0<strong>transactional microservices<\/strong>. It provides simple yet powerful event-driven programming models that solve the\u00a0<a href=\"http:\/\/eventuate.io\/whyeventdriven.html\">distributed data management problems<\/a>\u00a0inherent in a microservice architecture.<\/p>\n<p>The platform supports two different programming models:<\/p>\n<ul>\n<li>Eventuate Tram for microservices that use traditional JDBC\/JPA-based persistence.<\/li>\n<li>Eventuate for microservices that use\u00a0<a href=\"http:\/\/eventuate.io\/whyeventsourcing.html\">Event Sourcing<\/a>.<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"eventuate-tram-spring-bootjpa-examplesnew\">Eventuate Tram Spring Boot\/JPA examples<span class=\"new-marker\">new<\/span><\/h2>\n<p>The\u00a0<a href=\"https:\/\/github.com\/eventuate-tram\/eventuate-tram-core\">Eventuate Tram<\/a>\u00a0and\u00a0<a href=\"https:\/\/github.com\/eventuate-tram\/eventuate-tram-sagas\">Eventuate Tram Sagas<\/a>\u00a0frameworks enable you to develop event-driven microservices that use traditional JDBC\/JPA-based persistence.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/eventuate-tram\/eventuate-tram-examples-java-spring-todo-list\">Eventuate Tram Todo<\/a>\u00a0&#8211; a simple Todo list application that uses Spring Boot, JPA, domain events and CQRS.<\/li>\n<li><a href=\"https:\/\/github.com\/eventuate-tram\/eventuate-tram-sagas-examples-customers-and-orders\">Eventuate Tram Sagas Customers and Orders<\/a>\u00a0&#8211; demonstrates how to maintain data consistency in an Spring Boot, JPA-based microservice architecture using\u00a0<a href=\"http:\/\/microservices.io\/patterns\/data\/saga.html\">sagas<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/microservice-patterns\/ftgo-application\">FTGO application<\/a>\u00a0&#8211; the example application for my\u00a0<a href=\"https:\/\/www.manning.com\/books\/microservice-patterns\">Microservices patterns<\/a>\u00a0book<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"eventuate-event-sourcing-examples\">Eventuate Event Sourcing examples<\/h2>\n<p>Eventuate lets you easily write microservices that use\u00a0<a href=\"http:\/\/eventuate.io\/whyeventsourcing.html\">Event Sourcing and Command Query Responsibility Segregation (CQRS)<\/a>. Eventuate consists of a scalable, distributed event store server and client libraries for various languages and frameworks including Java, Scala, and the Spring framework. There are several example applications on github.com that illustrate how to use the Eventuate Platform.<\/p>\n<p>Eventuate is available as either a\u00a0<a href=\"https:\/\/signup.eventuate.io\/\">service (SaaS) hosted on Amazon Web Services<\/a>\u00a0or as an\u00a0<a href=\"https:\/\/github.com\/eventuate-local\/eventuate-local\">open-source project<\/a>\u00a0that you can run locally.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/eventuate-examples\/eventuate-examples-java-spring-todo-list\">Todo List application<\/a>\u00a0&#8211; the hello world application for the Eventuate\u2122 Platform. It illustrates how you can use the platform to write an application that uses Event Sourcing and Command Query Responsibility Segregation (CQRS). The Todo List application lets users maintain a todo list.<\/li>\n<li><a href=\"https:\/\/github.com\/eventuate-examples\/eventuate-examples-java-customers-and-orders\">Java version of the Orders and Customers example<\/a>\u00a0&#8211; an application that I\u2019ve used in my talks (e.g.\u00a0<a href=\"http:\/\/www.slideshare.net\/chris.e.richardson\/a-pattern-language-for-microservices-gluecon-2016\">Gluecon 2016<\/a>) to illustrate how to achieve eventual consistency using event sourcing.<\/li>\n<li><a href=\"https:\/\/github.com\/eventuate-examples\/eventuate-examples-java-aws-gateway-echo\">AWS Lambda Java Echo<\/a>\u00a0&#8211; illustrates how you can write an AWS Lambda function that consumes Eventuate events. It is deployed using\u00a0<a href=\"https:\/\/serverless.com\/\">Serverless<\/a>\u00a0and subscribes to events published by the Todo List application described above.<\/li>\n<li><a href=\"https:\/\/github.com\/eventuate-examples\/eventuate-examples-java-aws-lambda-todo-list\">AWS Lambda Todo List<\/a>\u00a0&#8211; the AWS Lambda version of the Todo List application described above. It consists of a set of lambdas that are deployed using\u00a0<a href=\"https:\/\/serverless.com\/\">Serverless<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/eventuate-examples\/eventuate-examples-restaurant-management\">Restaurant management<\/a>\u00a0&#8211; Food to Go is a fictitious, on-demand logistics company from Chris Richardson\u2019s book POJOs in Action. It delivers takeout orders from restaurants to customers. A key part of the application is the restaurant management service, which maintains a database of restaurants that can be queried for availability to deliver an order to a customer at a particular time. This version of the restaurant management service has an architecture based on microservices, event sourcing and Command Query Responsibility Segregation (CQRS). It is written in Java and uses the Eventuate Platform, Spring Boot, and Redis.<\/li>\n<li><a href=\"https:\/\/github.com\/cer\/event-sourcing-examples\">Money Transfer<\/a>\u00a0&#8211; shows how to transfer money between two bank accounts using an event-driven, eventually consistent transaction. There are Java and Scala versions of the code. The application has a microservices architecture and is written using Spring Boot.<\/li>\n<li><a href=\"https:\/\/github.com\/eventuate-examples\/es-kanban-board\">Kanban Board<\/a>\u00a0&#8211; an example of a real-time, multi-user collaborative application. The Kanban Board application enables users to collaboratively create and edit Kanban boards and tasks. Changes made by one user to a board or a task are immediately visible to other users viewing the same board or task. It has a microservices architecture and is written using Java and Spring Boot and uses MongoDB for materialized views. The application uses STOMP-over-WebSockets to push events from the event store to an AngularJS front-end.<\/li>\n<li><a href=\"https:\/\/github.com\/cer\/event-sourcing-using-scala-typeclasses\">Scala Customers and Orders<\/a>\u00a0&#8211; the example code from my\u00a0<a href=\"http:\/\/www.slideshare.net\/chris.e.richardson\/developing-functional-domain-models-with-event-sourcing-sbtb-sbtb2015\">Scala By the Bay 2015 presentation<\/a>, which describes a Scala typeclass-based design for Aggregates that use Event Sourcing.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"row\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>http:\/\/eventuate.io\/exampleapps.html The Eventuate\u2122 Platform for developing\u00a0transactional microservices. It provides simple yet powerful event-driven programming models that solve the\u00a0distributed data management [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-667","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=667"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/667\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}