diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj
index 850660fdc..5c4a66df3 100644
--- a/src/Services/Basket/Basket.API/Basket.API.csproj
+++ b/src/Services/Basket/Basket.API/Basket.API.csproj
@@ -7,6 +7,7 @@
+
diff --git a/src/Services/Basket/Basket.API/CustomExtensionMethods.cs b/src/Services/Basket/Basket.API/CustomExtensionMethods.cs
index 67ee876b0..d92432521 100644
--- a/src/Services/Basket/Basket.API/CustomExtensionMethods.cs
+++ b/src/Services/Basket/Basket.API/CustomExtensionMethods.cs
@@ -4,6 +4,13 @@ public static class CustomExtensionMethods
{
public static IServiceCollection AddRedis(this IServiceCollection services, IConfiguration configuration)
{
+ services.AddHealthChecks()
+ .AddRedis(_ =>
+ {
+ return configuration.GetConnectionString("redis");
+ },
+ "redis", tags: new[] { "ready", "liveness" });
+
return services.AddSingleton(sp =>
{
var redisConfig = ConfigurationOptions.Parse(configuration.GetConnectionString("redis"), true);
diff --git a/src/Services/Basket/Basket.API/Program.cs b/src/Services/Basket/Basket.API/Program.cs
index 0563867fb..664a152fb 100644
--- a/src/Services/Basket/Basket.API/Program.cs
+++ b/src/Services/Basket/Basket.API/Program.cs
@@ -1,4 +1,6 @@
-var builder = WebApplication.CreateBuilder(args);
+using Microsoft.Extensions.Diagnostics.HealthChecks;
+
+var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
@@ -23,20 +25,38 @@ builder.Services.AddTransient();
var app = builder.Build();
-app.UseServiceDefaults();
+try
+{
+ app.Logger.LogInformation("Running health checks...");
-app.MapGet("/", () => Results.Redirect("/swagger"));
+ // Do a health check on startup, this will throw an exception if any of the checks fail
+ var report = await app.Services.GetRequiredService().CheckHealthAsync();
-app.MapGrpcService();
-app.MapControllers();
+ if (report.Status == HealthStatus.Unhealthy)
+ {
+ app.Logger.LogCritical("Health checks failed!");
+ foreach (var entry in report.Entries)
+ {
+ if (entry.Value.Status == HealthStatus.Unhealthy)
+ {
+ app.Logger.LogCritical("{Check}: {Status}", entry.Key, entry.Value.Status);
+ }
+ }
+ return 1;
+ }
-var eventBus = app.Services.GetRequiredService();
+ app.UseServiceDefaults();
-eventBus.Subscribe();
-eventBus.Subscribe();
+ app.MapGet("/", () => Results.Redirect("/swagger"));
+
+ app.MapGrpcService();
+ app.MapControllers();
+
+ var eventBus = app.Services.GetRequiredService();
+
+ eventBus.Subscribe();
+ eventBus.Subscribe();
-try
-{
await app.RunAsync();
return 0;
diff --git a/src/Services/Basket/Basket.API/Properties/serviceDependencies.json b/src/Services/Basket/Basket.API/Properties/serviceDependencies.json
index 696e09f1b..adb08c8f2 100644
--- a/src/Services/Basket/Basket.API/Properties/serviceDependencies.json
+++ b/src/Services/Basket/Basket.API/Properties/serviceDependencies.json
@@ -7,6 +7,11 @@
"type": "rabbitmq",
"connectionId": "eventbus",
"dynamicId": null
+ },
+ "redis1": {
+ "type": "redis",
+ "connectionId": "ConnectionStrings:Redis",
+ "dynamicId": null
}
}
}
\ No newline at end of file
diff --git a/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json b/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json
index 81f47080f..8fb5df48a 100644
--- a/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json
+++ b/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json
@@ -11,6 +11,16 @@
"type": "rabbitmq.container",
"connectionId": "eventbus",
"dynamicId": null
+ },
+ "redis1": {
+ "serviceConnectorResourceId": "",
+ "containerPorts": "6379:6379",
+ "secretStore": "LocalSecretsFile",
+ "containerName": "basket-redis",
+ "containerImage": "redis:alpine",
+ "type": "redis.container",
+ "connectionId": "ConnectionStrings:Redis",
+ "dynamicId": null
}
}
}
\ No newline at end of file
diff --git a/src/Services/Services.Common/CommonExtensions.cs b/src/Services/Services.Common/CommonExtensions.cs
index bd1297682..7971b11a3 100644
--- a/src/Services/Services.Common/CommonExtensions.cs
+++ b/src/Services/Services.Common/CommonExtensions.cs
@@ -283,13 +283,13 @@ public static class CommonExtensions
"servicebus" => hcBuilder.AddAzureServiceBusTopic(
eventBusConnectionString,
topicName: "eshop_event_bus",
- name: "servicebus-check",
- tags: new string[] { "servicebus" }),
+ name: "servicebus",
+ tags: new string[] { "ready" }),
_ => hcBuilder.AddRabbitMQ(
$"amqp://{eventBusConnectionString}",
- name: "rabbitmqbus-check",
- tags: new string[] { "rabbitmqbus" })
+ name: "rabbitmq",
+ tags: new string[] { "ready" })
};
}