Skip to content

Commit 0abaafa

Browse files
committed
Health check circuit breaker
Signed-off-by: Tomasz Maruszak <maruszaktomasz@gmail.com>
1 parent c8250ed commit 0abaafa

File tree

69 files changed

+759
-406
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+759
-406
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ SlimMessageBus is a client façade for message brokers for .NET. It comes with i
9393
| `.Host.Outbox.Sql` | Transactional Outbox using MSSQL | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Outbox.Sql.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Outbox.Sql) |
9494
| `.Host.Outbox.Sql.DbContext` | Transactional Outbox using MSSQL with EF DataContext integration | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Outbox.Sql.DbContext.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Outbox.Sql.DbContext) |
9595
| `.Host.AsyncApi` | [AsyncAPI](https://www.asyncapi.com/) specification generation via [Saunter](https://github.com/tehmantra/saunter) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.AsyncApi.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.AsyncApi) |
96+
| `.Host.CircuitBreaker.HealthCheck` | Consumer circuit breaker based on [health checks](docs/intro.md#health-check-circuit-breaker) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.CircuitBreaker.HealthCheck.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.CircuitBreaker.HealthCheck) |
9697

9798
Typically the application layers (domain model, business logic) only need to depend on `SlimMessageBus` which is the facade, and ultimately the application hosting layer (ASP.NET, Console App, Windows Service) will reference and configure the other packages (`SlimMessageBus.Host.*`) which are the messaging transport providers and additional plugins.
9899

build/tasks.ps1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ $projects = @(
4343
"SlimMessageBus.Host.Outbox.Sql",
4444
"SlimMessageBus.Host.Outbox.Sql.DbContext",
4545

46+
"SlimMessageBus.Host.CircuitBreaker",
4647
"SlimMessageBus.Host.CircuitBreaker.HealthCheck",
4748

4849
"SlimMessageBus.Host.AsyncApi"

docs/NuGet.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ Plugins:
2424
- Transactional Outbox pattern (SQL, DbContext)
2525
- Serialization using JSON, Avro, ProtoBuf
2626
- AsyncAPI specification generation
27+
- Consumer Circuit Breaker based on Health Checks
2728

2829
Find out more [https://github.com/zarusz/SlimMessageBus](https://github.com/zarusz/SlimMessageBus).

src/Host.Plugin.Properties.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<Import Project="Common.NuGet.Properties.xml" />
55

66
<PropertyGroup>
7-
<Version>3.0.0-rc901</Version>
7+
<Version>3.0.0-rc902</Version>
88
</PropertyGroup>
99

1010
</Project>
Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
namespace Sample.CircuitBreaker.HealthCheck.Consumers;
22

3-
public class AddConsumer : IConsumer<Add>
4-
{
5-
private readonly ILogger<AddConsumer> _logger;
6-
7-
public AddConsumer(ILogger<AddConsumer> logger)
8-
{
9-
_logger = logger;
10-
}
11-
3+
public class AddConsumer(ILogger<AddConsumer> logger) : IConsumer<Add>
4+
{
125
public Task OnHandle(Add message, CancellationToken cancellationToken)
136
{
14-
_logger.LogInformation("{A} + {B} = {C}", message.a, message.b, message.a + message.b);
7+
logger.LogInformation("{A} + {B} = {C}", message.A, message.B, message.A + message.B);
158
return Task.CompletedTask;
169
}
1710
}
Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
namespace Sample.CircuitBreaker.HealthCheck.Consumers;
22

3-
public class SubtractConsumer : IConsumer<Subtract>
4-
{
5-
private readonly ILogger<SubtractConsumer> _logger;
6-
7-
public SubtractConsumer(ILogger<SubtractConsumer> logger)
8-
{
9-
_logger = logger;
10-
}
11-
3+
public class SubtractConsumer(ILogger<SubtractConsumer> logger) : IConsumer<Subtract>
4+
{
125
public Task OnHandle(Subtract message, CancellationToken cancellationToken)
136
{
14-
_logger.LogInformation("{A} - {B} = {C}", message.a, message.b, message.a - message.b);
7+
logger.LogInformation("{A} - {B} = {C}", message.A, message.B, message.A - message.B);
158
return Task.CompletedTask;
169
}
1710
}

src/Samples/Sample.CircuitBreaker.HealthCheck/GlobalUsings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
global using SlimMessageBus;
1515
global using SlimMessageBus.Host;
1616
global using SlimMessageBus.Host.RabbitMQ;
17-
global using SlimMessageBus.Host.Serialization.SystemTextJson;
17+
global using SlimMessageBus.Host.Serialization.SystemTextJson;
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
namespace Sample.CircuitBreaker.HealthCheck.HealthChecks;
22

3-
using Microsoft.Extensions.Logging;
4-
5-
public class AddRandomHealthCheck : RandomHealthCheck
3+
public class AddRandomHealthCheck(ILogger<AddRandomHealthCheck> logger) : RandomHealthCheck(logger)
64
{
7-
public AddRandomHealthCheck(ILogger<AddRandomHealthCheck> logger)
8-
: base(logger)
9-
{
10-
}
115
}

src/Samples/Sample.CircuitBreaker.HealthCheck/HealthChecks/RandomHealthCheck.cs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@
22

33
using Microsoft.Extensions.Diagnostics.HealthChecks;
44

5-
public abstract class RandomHealthCheck : IHealthCheck
6-
{
7-
private readonly ILogger _logger;
8-
9-
protected RandomHealthCheck(ILogger logger)
10-
{
11-
_logger = logger;
12-
}
13-
5+
public abstract class RandomHealthCheck(ILogger logger) : IHealthCheck
6+
{
147
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
158
{
169
var value = (HealthStatus)Random.Shared.Next(3);
17-
_logger.LogInformation("{HealthCheck} evaluated as {HealthStatus}", this.GetType(), value);
10+
logger.LogInformation("{HealthCheck} evaluated as {HealthStatus}", GetType(), value);
1811
return Task.FromResult(new HealthCheckResult(value, value.ToString()));
1912
}
2013
}
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
namespace Sample.CircuitBreaker.HealthCheck.HealthChecks;
22

3-
using Microsoft.Extensions.Logging;
4-
5-
public class SubtractRandomHealthCheck : RandomHealthCheck
3+
public class SubtractRandomHealthCheck(ILogger<SubtractRandomHealthCheck> logger) : RandomHealthCheck(logger)
64
{
7-
public SubtractRandomHealthCheck(ILogger<SubtractRandomHealthCheck> logger)
8-
: base(logger)
9-
{
10-
}
115
}

0 commit comments

Comments
 (0)