The main objective of this repository is to demonstrate the use of 🌉 integration platforms and middleware. Insights about the best practices🎖️for integrating enterprise applications were gained from the book📕Enterprise Integration Patterns by Gregor Hohpe.
NB:bangbang: Before running our 2 projects, make sure you have RabbitMQ running 🐰.
If you have Docker within reach 🐳 you can simply run the following command to start it:
docker run --rm --name rabbitMQ -p 15672:15672 -p 5672:5672 rabbitmq:management
Optional: To make sure RabbitMQ is running, navigate to
localhost:15672
in your browser
NB:bangbang:Make sure you have .Net Core 3.0 installed on your system.
To start the services you'd need to navigate to the src
directory and execute the start.sh.
Next, start the Client service by running dotnet run
in src/Client
folder.
Written description of the depicked scenario can be found in a pdf format.
We have 6 services within this project:
Client - This is the main CLI that the customer will use. It takes input from the user and using queues makes requests to the necessary services. It also has an active listener on new notifications so there is a centralized way of sending information back to the client.
Reservation - It is used to keep track of reservations that have been made on the system. It can take requests for new reservations and orchestrates some of the processes needed to complete one.
Package - The package service serves the purpose of keeping deals available to the clients. These packages are the actual consumable for the client which will have the choice between a few of them.
Car - Acts as a repository. It keeps knowledge about the current cars existing in the system, including their prices and descriptions.
Notification - As mentioned before the notifications system is the centralized way of talking back to the client. It takes a message and some command which when passed to the client will lead to certain actions being executed.
Payment - A very simple implementation of a payment service. It takes requests which include credit card information and randomly decides if this card should be accepted or declined.
The following architecture diagrams provide an insight (various sequential scenarious) on how the software implementation has been made:
The entire software architecture can be seen below:
Our solution illustrates the implementation of at least 5️⃣ enterprise integration patterns:
Messaging Gateway
- as a class to wrap messaging-specific method callsCorrelation Identifier
- assigns the request a request ID that will be used to processes the reply ( by correlation Id - we know which request the reply is for)Point-To-Point
- RPCPublish-Subscribe Channel
- when sending notificationsMessage-Translator
- translate one data format into anotherCommand Message
- Others
The data processed by the application exists in two different formats - JSON and XML.
David Alves 👨🏻💻
Github
Elitsa Marinovska 👩🏻💻
Github
Attending "System Integration" course of Software Development bachelor's degree