Johnson is a discovery and proxy service designed for managing server groups, built as part of a personal learning project.
This project is NOT intended for production use (at least currently). It was developed primarily as a learning exercise to explore concepts related to server orchestration, discovery, and routing. If you intend to use this in a production environment, please make sure to do proper testing and validation before.
- Service Discovery: Register and track the availability of servers within a group.
- Proxying: Route external API requests to the appropriate services.
- Fault Tolerance: Provides basic fault tolerance mechanisms for service availability.
- ASP.NET Core Web API - Main framework used in the project.
- Entity Framework Core - Used for database access.
- RabbitMQ - Used messaging and communication between modules.
- Redis - Used caching server details for faster data retrievals.
- SQLite - Acts as a backup and permanent storage for cached data, ensuring persistence in case of system failure.
- RabbitMQ - For environment setup (RabbitMQ and Redis).
This project requires Docker to set up RabbitMQ and Redis for local development. Here are the steps to get it running:
- Docker
- .NET 8 or higher
- SQLite3
-
Clone the repository:
git clone https://github.com/caganseyrek/Johnson.git
-
Navigate to the project directory:
cd path/to/Johnson
-
Run docker container for RabbitMQ and Redis using Docker Compose:
docker-compose up
-
Build the ASP.NET Core Web API project:
dotnet build
-
Apply migrations to the SQLite database:
dotnet ef database update
-
Apply migrations to the SQLite database:
dotnet run
To stop the Docker services (RabbitMQ and Redis), run:
docker-compose down
This project is open-source and licensed under MIT License.