Code Monkey home page Code Monkey logo

eventuate-examples-java-spring-todo-list's Introduction

Todo List example application

The Todo List application is the hello world application for the Eventuate™ Platform. It illustrates how you can use the platform to write an application with a microservices architecture that uses Event Sourcing and Command Query Responsibility Segregation (CQRS). The Todo List application lets users maintain a todo list.

The Todo List application is a Java and Spring Boot application built using Eventuate™'s Event Sourcing based programming model. Todos are implemented by an Event Sourcing-based TodoAggregate. The aggregate's events are persisted in the Eventuate event store. The application also maintains a materialized view of the data in MySQL.

Don't forget to take a look at the other Eventuate example applications.

Got questions?

Don't hesitate to create an issue or see

Architecture

The Todo application has a microservice architecture. It is written using the Eventuate Client Framework for Java, which provides an event sourcing based programming model. The following diagram shows the Todo List application architecture:

The application consists of the following:

  • Todo service - a Java and Spring Boot-based service that has a HATEOAS-style REST API for creating, updating and querying todo list items. It uses Eventuate to persist aggregates using event sourcing.
  • Todo view service - a Java and Spring Boot-based service that provides a REST API for querying todos. It implements a Command Query Responsibility Segregation (CQRS) view of todos using MySQL. MySQL is kept up to date by subscribing to events produced by the Todo service.
  • MySQL database - stores the CQRS view of todo list items.

Note: for simplicity, the Todo list application can be deployed as a monolithic application.

Two versions of the source code

There are two versions of the source code:

  • single-module - a single module Gradle project for a monolithic version of the application. It is the easiest to get started with.
  • multi-module - a multi-module Gradle project for the microservices-based version of the application.

Note: you do not need to install Gradle since it will be downloaded automatically. You just need to have Java 8 installed.

Building and running the application

The steps for building both versions of the application are identical. However, the details of how to build and run the services depend slightly on whether you are using Eventuate SaaS or Eventuate Local.

Building and running using Eventuate SaaS

First, must sign up to get your credentials in order to get free access to the SaaS version.

Next, build the application

./gradlew assemble

Next, you can launch the services using Docker Compose:

docker-compose build
docker-compose up -d

Building and running using Eventuate Local

First, build the application

./gradlew assemble -P eventuateDriver=local

Next, launch the services using Docker Compose:

export DOCKER_HOST_IP=...
docker-compose -f docker-compose-eventuate-local.yml build
docker-compose -f docker-compose-eventuate-local.yml up -d

Note: You need to set DOCKER_HOST_IP before running Docker Compose. This must be an IP address or resolvable hostname. It cannot be localhost. See this guide to setting DOCKER_HOST_IP for more information.

Using the application

Once the application has started, you can use the application via the Swagger UI.

If you are running the multi-module version:

  • http://${DOCKER_HOST_IP}:8081/swagger-ui.html - the command-side service
  • http://${DOCKER_HOST_IP}:8082/swagger-ui.html - the query-side service

If you are running the single-module version:

  • http://${DOCKER_HOST_IP}:8080/swagger-ui.html - the monolithic application

Using the Eventuate Local console

You can also use the Eventuate Local console to view aggregates and watch the stream of events. Visit the URL http://${DOCKER_HOST_IP}:8085

Got questions?

Don't hesitate to create an issue or see

eventuate-examples-java-spring-todo-list's People

Contributors

cer avatar dartpopikyardo avatar

Watchers

James Cloos avatar Oguzhan Fehmi Kunter avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.