diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/POST.md b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/POST.md new file mode 100644 index 0000000000..a56dd5a464 --- /dev/null +++ b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/POST.md @@ -0,0 +1,173 @@ +# Announcing .NET Aspire Integration for ABP Microservice Template + +We are excited to announce the integration of **.NET Aspire** into the ABP microservice solution, available starting with **ABP Studio v2.0.0**. This integration brings a unified development experience for building, running, debugging, and deploying distributed applications. With Aspire, you can now orchestrate your entire microservice ecosystem with a single command, eliminating complex configurations and making local development effortless. + +## What is .NET Aspire? + +[Aspire](https://aspire.dev/get-started/what-is-aspire/) is a cloud-ready stack designed to streamline the development of distributed applications. It provides: + +- **Orchestration**: A code-first approach to defining and running distributed applications, managing dependencies, and launch order. +- **Integrations**: Pre-built components for common services (databases, caches, message brokers) with automatic configuration. +- **Tooling**: A developer dashboard for real-time monitoring of logs, traces, metrics, and resource health. +- **Service Discovery**: Automatic service-to-service communication without hardcoded endpoints. +- **Observability**: Built-in OpenTelemetry support for distributed tracing, metrics, and structured logging. + +## How Does It Work with ABP? + +When you enable .NET Aspire in an ABP microservice solution, you get a fully integrated development experience where: + +- All microservices, gateways, and applications are orchestrated through a single entry point (AppHost). +- Infrastructure containers (databases, Redis, RabbitMQ, Elasticsearch, etc.) are managed as code. +- OpenTelemetry, health checks, and service discovery are automatically configured for all projects via the shared ServiceDefaults project. + +## Enabling Aspire in Your Solution + +When creating a new microservice solution via ABP Studio: + +1. In the solution creation wizard, look for the **".NET Aspire Integration"** step. +2. Toggle the option to **enable .NET Aspire**. +3. Complete the wizard—Aspire projects will be generated along with your solution. + +![Enable Aspire in ABP Studio](aspire-configuration.png) + +## Solution Structure Changes + +When Aspire is enabled, two additional projects are added to your solution: + +![Aspire Solution Structure](aspire-solution-structure.png) + +### AppHost (Orchestrator) + +[`AppHost`](https://aspire.dev/get-started/app-host/) is the .NET Aspire orchestrator project that declares all resources (services, databases, containers, applications) and their dependencies in C# code. It provides: + +- **Centralized orchestration**: Start your entire microservice ecosystem with a single command. +- **Code-first infrastructure**: Databases, Redis, RabbitMQ, Elasticsearch, and observability tools are defined programmatically. +- **Dependency management**: Services start in the correct order using `WaitFor()` declarations. +- **Automatic configuration**: Connection strings, endpoints, and environment variables are injected automatically. + +### ServiceDefaults + +[`ServiceDefaults`](https://aspire.dev/fundamentals/service-defaults/) is a shared library that provides common cloud-native configuration for all projects in the solution. Every service uses the same observability, health check, and resilience patterns. + +| Feature | Description | +|---------|-------------| +| OpenTelemetry | Tracing, metrics, and structured logging with automatic instrumentation | +| Health Checks | `/health` and `/alive` endpoints for Kubernetes-style probes | +| Service Discovery | Automatic resolution of service endpoints | +| HTTP Resilience | Retry policies, timeouts, and circuit breakers for HTTP clients | + +## Running the Solution with Aspire + +Running your microservice solution has never been easier: + +1. Open **Solution Runner** in ABP Studio. +2. Select the **Aspire** profile. +3. Run `AppHost`. + +![Solution Runner with Aspire](solution-runner-aspire-profile.png) + +AppHost automatically: + +- Starts all infrastructure containers (database, Redis, RabbitMQ, Elasticsearch, etc.). +- Launches all microservices, gateways, and applications in dependency order. +- Injects connection strings and environment variables. +- Opens the Aspire Dashboard for monitoring. + +![Aspire AppHost Resource Topology](aspire-apphost-topology.png) + +## Aspire Dashboard + +The Aspire Dashboard provides real-time tracking of your application's state. It enables you to monitor logs, traces, metrics, and environment configurations in an intuitive UI. + +![Aspire Dashboard Resources](aspire-dashboard-resources.png) + +### Key Dashboard Features + +#### Console Logs + +Display console logs from all resources in real-time. Filter by resource and log level to quickly find relevant information during development and debugging. + +![Aspire Dashboard Console](aspire-dashboard-console.png) + +#### Structured Logs + +View structured logs from all resources with advanced filtering capabilities. Search and filter logs by resource, log level, timestamp, and custom properties. + +![Aspire Dashboard Structured Logs](aspire-dashboard-structured-logs.png) + +#### Distributed Traces + +Explore distributed traces across your microservices to understand request flows and identify performance bottlenecks. + +![Aspire Dashboard Traces](aspire-dashboard-traces.png) + +#### Metrics + +Monitor real-time metrics including HTTP requests, response times, garbage collection, memory usage, and custom metrics. + +![Aspire Dashboard Metrics](aspire-dashboard-metrics.png) + +## Pre-Configured Observability Tools + +AppHost comes with pre-configured observability and management tools: + +### Grafana + +Visualization and analytics platform for monitoring metrics with interactive dashboards. + +![Grafana Dashboard](aspire-grafana-dashboard.png) + +### Jaeger + +Distributed tracing system to monitor and troubleshoot problems across microservices. + +![Jaeger Traces](aspire-jaeger-traces.png) + +### Kibana + +Visualization tool for Elasticsearch data with search and data visualization capabilities for logs. + +![Kibana Dashboard](aspire-kibana-dashboard.png) + +### Prometheus + +Monitoring and alerting toolkit that collects and stores metrics as time series data. + +![Prometheus Dashboard](aspire-prometheus-dashboard.png) + +### RabbitMQ Management + +Web-based interface for managing and monitoring the RabbitMQ message broker. + +![RabbitMQ Management](aspire-rabbitmq-management.png) + +### Redis Insight + +Visual tool for Redis that allows you to browse data, run commands, and monitor performance. + +![Redis Insight](aspire-redis-insight.png) + +### Database Admin Tools + +The database management admin tool varies by database type: + +| Database | Tool | +|----------|------| +| SQL Server | DBeaver CloudBeaver | +| MySQL | phpMyAdmin | +| PostgreSQL | pgAdmin | +| MongoDB | Mongo Express | + +![pgAdmin Dashboard](aspire-database-postgre-pgadmin.png) + +## Get Started Today + +Ready to experience the power of .NET Aspire with ABP? Create a new microservice solution in ABP Studio and enable the .NET Aspire integration option. For detailed documentation, visit our [.NET Aspire Integration documentation](https://abp.io/docs/latest/solution-templates/microservice/aspire-integration). + +To learn more about .NET Aspire, visit: [https://aspire.dev](https://aspire.dev/get-started/what-is-aspire/) + +We are excited to bring this integration to you and can't wait to hear your feedback. If you have any questions or suggestions, please drop a comment below. + +Happy coding! + +**The Volosoft Team** diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-apphost-topology.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-apphost-topology.png new file mode 100644 index 0000000000..a7622cff63 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-apphost-topology.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-configuration.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-configuration.png new file mode 100644 index 0000000000..74cd5066bb Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-configuration.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-console.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-console.png new file mode 100644 index 0000000000..fce1ca9355 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-console.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-metrics.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-metrics.png new file mode 100644 index 0000000000..690c3a910e Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-metrics.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-resources.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-resources.png new file mode 100644 index 0000000000..7b6777a8b9 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-resources.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-structured-logs.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-structured-logs.png new file mode 100644 index 0000000000..4c26e1fe48 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-structured-logs.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-traces.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-traces.png new file mode 100644 index 0000000000..9e5d761582 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-dashboard-traces.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-database-postgre-pgadmin.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-database-postgre-pgadmin.png new file mode 100644 index 0000000000..a11107ddd4 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-database-postgre-pgadmin.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-grafana-dashboard.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-grafana-dashboard.png new file mode 100644 index 0000000000..6c1eb3999e Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-grafana-dashboard.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-jaeger-traces.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-jaeger-traces.png new file mode 100644 index 0000000000..e9409465b1 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-jaeger-traces.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-kibana-dashboard.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-kibana-dashboard.png new file mode 100644 index 0000000000..90bcbf14b5 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-kibana-dashboard.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-prometheus-dashboard.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-prometheus-dashboard.png new file mode 100644 index 0000000000..764f6cfb38 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-prometheus-dashboard.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-rabbitmq-management.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-rabbitmq-management.png new file mode 100644 index 0000000000..362af7aac3 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-rabbitmq-management.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-redis-insight.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-redis-insight.png new file mode 100644 index 0000000000..429cbefae7 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-redis-insight.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-solution-structure.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-solution-structure.png new file mode 100644 index 0000000000..3379892b69 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/aspire-solution-structure.png differ diff --git a/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/solution-runner-aspire-profile.png b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/solution-runner-aspire-profile.png new file mode 100644 index 0000000000..d11edfe584 Binary files /dev/null and b/docs/en/Blog-Posts/2025-12-24-Announcing-Aspire-For-Microservice-Template/solution-runner-aspire-profile.png differ diff --git a/docs/en/solution-templates/microservice/aspire-integration.md b/docs/en/solution-templates/microservice/aspire-integration.md index e932606208..2da2706b34 100644 --- a/docs/en/solution-templates/microservice/aspire-integration.md +++ b/docs/en/solution-templates/microservice/aspire-integration.md @@ -66,7 +66,7 @@ When Aspire is enabled, two additional projects are added to your solution: **Key files in AppHost:** | File | Purpose | -|------|---------| +|--------|------------| | `AppHost.cs` | Entry point—creates the distributed application builder and adds all resources | | `AppHostExtensions.cs` | Extension methods for adding infrastructures, databases, microservices, gateways, and applications | @@ -309,7 +309,7 @@ var myResource = builder .AddProject("myresource", "MySolutionName.MyProjectName.MyResource") .WaitFor(databases.AdministrationDb) .WaitFor(databases.IdentityDb) - .WaitFor(databases.MyServiceDb) + .WaitFor(databases.MyResourceDb) .WaitFor(databases.AuditLoggingDb) .WaitFor(databases.SaasDb) .WaitFor(databases.LanguageManagementDb) @@ -318,7 +318,7 @@ var myResource = builder .WithReference(databases.AdministrationDb) .WithReference(databases.IdentityDb) .WithReference(databases.BlobStoringDb) - .WithReference(databases.MyServiceDb) + .WithReference(databases.MyResourceDb) .WithReference(databases.AuditLoggingDb) .WithReference(databases.SaasDb) .WithReference(databases.LanguageManagementDb) @@ -349,7 +349,7 @@ if (webgateway != null) If your resource needs to be added to `CORS` and `RedirectAllowedUrls` configuration for the authentication server, update the `allowedUrls` variable in the `ConfigureAuthServer` method: ```csharp -var allowedUrls = ReferenceExpression.Create($"{applicationResources["MyService"].GetEndpoint("http")},..."); +var allowedUrls = ReferenceExpression.Create($"{applicationResources["MyResource"].GetEndpoint("http")},..."); ``` ### 7. Add Database (if needed) @@ -357,7 +357,7 @@ var allowedUrls = ReferenceExpression.Create($"{applicationResources["MyService" If your resource requires a dedicated database, add it in the `AddDatabases` method: ```csharp -var myServiceDb = databaseServers.Postgres.AddDatabase("MyService", "MySolutionName.MyProjectName_MyService"); +var myResourceDb = databaseServers.Postgres.AddDatabase("MyResource", "MySolutionName.MyProjectName_MyResource"); ``` > Adjust the database management system as necessary. diff --git a/docs/en/solution-templates/microservice/images/aspire-configuration.png b/docs/en/solution-templates/microservice/images/aspire-configuration.png index e2e1f4db21..74cd5066bb 100644 Binary files a/docs/en/solution-templates/microservice/images/aspire-configuration.png and b/docs/en/solution-templates/microservice/images/aspire-configuration.png differ diff --git a/docs/en/solution-templates/microservice/images/aspire-solution-structure.png b/docs/en/solution-templates/microservice/images/aspire-solution-structure.png index 65f95ebdcc..3379892b69 100644 Binary files a/docs/en/solution-templates/microservice/images/aspire-solution-structure.png and b/docs/en/solution-templates/microservice/images/aspire-solution-structure.png differ diff --git a/docs/en/solution-templates/microservice/images/solution-runner-aspire-profile.png b/docs/en/solution-templates/microservice/images/solution-runner-aspire-profile.png index 49223aabce..d11edfe584 100644 Binary files a/docs/en/solution-templates/microservice/images/solution-runner-aspire-profile.png and b/docs/en/solution-templates/microservice/images/solution-runner-aspire-profile.png differ diff --git a/docs/en/solution-templates/microservice/images/solution-runner-default-profile.png b/docs/en/solution-templates/microservice/images/solution-runner-default-profile.png index 3b1e866c88..6867a43872 100644 Binary files a/docs/en/solution-templates/microservice/images/solution-runner-default-profile.png and b/docs/en/solution-templates/microservice/images/solution-runner-default-profile.png differ