Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Example code for the book Microservice patterns

License

NotificationsYou must be signed in to change notification settings

microservices-patterns/ftgo-application

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This is the example code for my bookMicroservice patterns.

Microservices Patterns Cover

Please note

  • The code is still work in progress

  • It primarily illustrates the technical aspects of the microservice architecture and so the business logic is minimal

  • The documentation is sparse/non-existent and you will need to look in the book

  • The application consists of many services and so requires a lot of memory. It runs well, for example, on a 16GB Macbook pro.

  • The application’s services and the infrastructure services, such as MySQL and Apache Kafka, are deployed using Docker containers using either Docker Compose or Kubernetes.

Got questions?

Please create agithub issue and I’ll do my best to help you.

Application architecture

Not surprisingly, this application has a microservice architecture.There are the following services:

Service design

Key points:

  • A service consists of a single Gradle module.For example,ftgo-order-service implements theOrder Service

  • A service is a Spring Boot application

  • A service has a Swagger UIhttp://…​/swagger-ui.html. Seeopen-swagger-uis.sh

  • A service typically consists of the following packages:

    • domain - domain logic including aggregates

    • messaging - messaging adapters

    • web - Spring MVC controllers (HTTP adapters)

    • main - the main application

  • The services use the following other frameworks

Chapter by chapter

This section maps the chapters to the code.

Chapter 3 Inter-process communication in a microservice architecture

  • The services have a REST API

  • The services also communicate using the Apache Kafka message broker via theEventuate Tram framework

Chapter 4 Managing transactions with sagas

Theftgo-order-service uses sagas to maintain data consistency:

The services that participate in these sagas define the following command handlers:

Chapter 5 Designing business logic in a microservice architecture

All the services' business logic is implemented using Domain-Driven design aggregates.

Chapter 6 Developing business logic with event sourcing

Chapter 7 Implementing queries in a microservice architecture

Chapter 8 External API patterns

Building and running the application

Pre-requisites

  • Java 8+

  • Docker and Docker Compose

  • Internet access so that Gradle and Docker can download dependencies and container images

Building

Temporary: Build the Spring Cloud Contracts using this command:

./gradlew buildContracts

Build the services using this command:

./gradlew assemble

Running the application

Run the application using this command:

./gradlew :composeUp

Note: the ':'

This can take a while.

Using the application

Use the services Swagger UIs to invoke the services.

You can also access the application via theAPI Gateway athttp://localhost:8087.However, currently it doesn’t have a Swagger UI so you will have to usecurl, for example.

Note: if the containers aren’t accessible vialocalhost - e.g. you are using Docker Toolbox, you will have to use${DOCKER_HOST_IP} as described below.

Stopping the application

Stop the application using this command:

./gradlew :composeDown

Deploying the application on Kubernetes

You can find Kubernetes YAML files in the following directories:deployment/kubernetes and*/src/deployment/kubernetes.There are also some helpful shell scripts.

Deploying services

You can run this command

./deployment/kubernetes/scripts/kubernetes-deploy-all.sh

Undeploying the services

You can run the script to undeploy the services:

./deployment/kubernetes/scripts/kubernetes-delete-all.sh

If you want to delete the persistent volumes for Apache Kafka, Zookeeper and MySQL please run the command:

./deployment/kubernetes/scripts/kubernetes-delete-volumes.sh

Setting environment variables to do development

You should not need to set any environment variables.To run the application, you certainly do not.Similarly, to do development (e.g. run tests), you typically do not need to set any environment variables.That’s because Docker containers are generally accessible (e.g. Docker for Windows/Mac) on the host vialocalhost.However, if Docker is running elsewhere (e.g. you are using Docker Toolbox) you will need to setDOCKER_HOST_IP.

Quick way

A quick way to set the environment variables is to run the script./set-env.sh.

Long way

The value ofDOCKER_HOST_IP must be meaningful to both Java services/tests running on your desktop/laptop and to Docker containers.Please do NOT set it to the unresolvable hostname of your machine,localhost or127.0.0.1 since the Docker containers will probably not work correctly.

Verifying that DOCKER_HOST_IP is set correctly

You can verify thatDOCKER_HOST_IP is set correctly by running this command:

docker run -p 8889:8888 -e DOCKER_DIAGNOSTICS_PORT=8889 -e DOCKER_HOST_IP \     --rm eventuateio/eventuateio-docker-networking-diagnostics:0.2.0.RELEASE

Setting the environment variable in your IDE

If you want to run Java services/tests within your IDE on your desktop/laptop AND the Docker containers are not accessible vialocalhost THEN you will need to setDOCKER_HOST_IP within your IDE.How to do this depends on your operating system and IDE.For example, I find it convenient to launch my IDE from the command line and after setting this environment variable.


[8]ページ先頭

©2009-2025 Movatter.jp