A comprehensive, microservices-based banking solution built with .NET 10 and Aspire, featuring a modern architecture designed for scalability, performance, and reliability.
The solution employs a microservices architecture orchestrated by YARP (Yet Another Reverse Proxy) as the API Gateway. Services communicate synchronously via gRPC and asynchronously via Apache Kafka.
graph TD
Client[Client Applications] -->|HTTPS| Gateway[YARP API Gateway<br/>Port: 5000]
subgraph "Infrastructure"
Postgres[(PostgreSQL<br/>Port: 5432)]
Redis[(Redis Cache<br/>Port: 6379)]
Kafka{Apache Kafka<br/>Port: 9092}
end
subgraph "Microservices"
Gateway -->|/customer/*| Customer[Customer Profile Service<br/>Port: 5039]
Gateway -->|/account/*| Account[Account Services<br/>Port: 5167]
Gateway -->|/transaction/*| Transaction[Transaction Service<br/>Port: 5238]
Customer --> Postgres
Customer --> Redis
Customer -->|Events| Kafka
Account --> Postgres
Account -->|Events| Kafka
Account -->|gRPC| Customer
Transaction --> Postgres
Transaction -->|Events| Kafka
Transaction -->|gRPC| Account
Notification[Notification Service<br/>Port: 5049] -->|Consumes| Kafka
Notification -->|SMTP| Email[Email Provider]
end
| Service | Port (Container/Host) | Description | Technology |
|---|---|---|---|
| YARP API Gateway | 8080 / 5000 |
Entry point for all external traffic. Handles routing, load balancing, and rate limiting. | .NET 10, YARP |
| Customer Profile | 8080 / 5039 |
Manages user identity, onboarding, biometric verification (FaceAI), and auth (JWT). | .NET 10, Postgres, Redis |
| Account Services | 8080 / 5167 |
Core banking operations: account creation, balance management, and status tracking. | .NET 10, Postgres, gRPC |
| Transaction Service | 8080 / 5238 |
Handles funds transfer, standard & instant payments, and orchestrates transaction sagas. | .NET 10, Postgres, Kafka |
| Notification Service | 8080 / 5049 |
Listens to Kafka events to send SMS/Email alerts to customers. | .NET 10, Kafka, MailKit |
- Framework: .NET 10
- Orchestration: .NET Aspire & Docker Compose
- API Gateway: YARP
- Databases: PostgreSQL (Primary data store), Redis (Distributed Caching)
- Messaging: Apache Kafka (Event-driven communication)
- Communication: gRPC (Inter-service), REST (External API)
- Authentication: JWT Bearer Tokens, Identity
- Observability: OpenTelemetry, Serilog
- .NET 10 SDK: Download here
- Docker Desktop: Required for running containers.
- PostgreSQL: Local install or via Docker.
git clone https://github.com/amaechijude/CoreBankinSoftware.git
cd CoreBankingSoftwareCopy .env.example to .env (if available) or configure appsettings.json in each service.
Ensure Docker is running.
You have two options to run the project:
If you have the Aspire workload installed:
cd CoreBankingSoftware.AppHost
dotnet runThis will launch the Aspire Dashboard, allowing you to view logs, metrics, and traces for all services.
Build and start all services, including infrastructure (Postgres, Redis, Kafka):
docker-compose up --buildAccess the services:
- API Gateway:
http://localhost:5000 - Customer Swagger:
http://localhost:5039/swagger(or/scalar/v1) - Account Swagger:
http://localhost:5167/swagger
After starting the services (especially Postgres), apply migrations:
# Customer Profile
cd CustomerProfile/src/CustomerProfile.API
dotnet ef database update
# Account Services
cd AccountServices
dotnet ef database updateRun unit and integration tests:
dotnet testKey configuration settings can be found in appsettings.json or overridden via Environment Variables:
ConnectionStrings__DefaultConnection: PostgreSQL connection string.Kafka__BootstrapServers: Kafka broker address (default:localhost:9092orkafka:9092).Redis__ConnectionString: Redis connection string.JwtSettings__Secret: Secret key for token generation.
Core Banking Software - Built for modern financial needs.