mirror of
https://github.com/MAKS-IT-COM/maksit-hamode.git
synced 2026-06-30 22:36:42 +02:00
(feature): dependencies update, light refactoring
This commit is contained in:
parent
a005ca6cbe
commit
0efd79e567
@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.0.1] - 2026-06-20
|
||||
|
||||
### Added
|
||||
- DI registration extensions in `MaksIT.HAMode.Extensions.ServiceCollectionExtensions` for runtime instance id and backend-specific lease service wiring (`PostgreSql`, `Redis`, `Etcd`).
|
||||
|
||||
### Changed
|
||||
- Updated package/release setup to publish `MaksIT.HAMode` as the primary distributable library for version `1.0.1`.
|
||||
- Updated several dependency versions across HAMode projects.
|
||||
|
||||
## [1.0.0] - 2026-06-20
|
||||
|
||||
### Added
|
||||
|
||||
26
README.md
26
README.md
@ -7,6 +7,7 @@ Reusable high-availability runtime coordination library for MaksIT services.
|
||||
## Packages
|
||||
|
||||
- `MaksIT.HAMode` (single NuGet package)
|
||||
- `MaksIT.HAMode.Extensions.ServiceCollectionExtensions`
|
||||
- `MaksIT.HAMode.Abstractions` namespace:
|
||||
- `IRuntimeInstanceId`
|
||||
- `IRuntimeLeaseService`
|
||||
@ -46,52 +47,50 @@ Reusable high-availability runtime coordination library for MaksIT services.
|
||||
|
||||
```xml
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MaksIT.HAMode" Version="0.1.0" />
|
||||
<PackageReference Include="MaksIT.HAMode" Version="1.0.1" />
|
||||
</ItemGroup>
|
||||
```
|
||||
|
||||
### Shared runtime instance id
|
||||
|
||||
```csharp
|
||||
using MaksIT.HAMode.Abstractions;
|
||||
using MaksIT.HAMode.Extensions;
|
||||
|
||||
builder.Services.AddSingleton<IRuntimeInstanceId, RuntimeInstanceIdProvider>();
|
||||
builder.Services.AddHAModeRuntimeInstanceId();
|
||||
```
|
||||
|
||||
### PostgreSQL backend
|
||||
|
||||
```csharp
|
||||
using MaksIT.HAMode.Abstractions;
|
||||
using MaksIT.HAMode.PostgreSql;
|
||||
using MaksIT.HAMode.Extensions;
|
||||
|
||||
public sealed class MyPgLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseConnectionStringProvider {
|
||||
public string ConnectionString => cfg["Configuration:Engine:ConnectionString"]!;
|
||||
}
|
||||
|
||||
builder.Services.AddSingleton<IRuntimeLeaseConnectionStringProvider, MyPgLeaseConnectionProvider>();
|
||||
builder.Services.AddSingleton<IRuntimeLeaseService, RuntimeLeaseServiceNpgsql>();
|
||||
builder.Services.AddHAModePostgreSql<MyPgLeaseConnectionProvider>();
|
||||
```
|
||||
|
||||
### Redis backend
|
||||
|
||||
```csharp
|
||||
using MaksIT.HAMode.Abstractions;
|
||||
using MaksIT.HAMode.Redis;
|
||||
using MaksIT.HAMode.Extensions;
|
||||
|
||||
public sealed class MyRedisLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseRedisConnectionProvider {
|
||||
public string Configuration => cfg["Configuration:Redis:ConnectionString"]!;
|
||||
public string KeyPrefix => "my-app/runtime-leases:";
|
||||
}
|
||||
|
||||
builder.Services.AddSingleton<IRuntimeLeaseRedisConnectionProvider, MyRedisLeaseConnectionProvider>();
|
||||
builder.Services.AddSingleton<IRuntimeLeaseService, RuntimeLeaseServiceRedis>();
|
||||
builder.Services.AddHAModeRedis<MyRedisLeaseConnectionProvider>();
|
||||
```
|
||||
|
||||
### etcd backend
|
||||
|
||||
```csharp
|
||||
using MaksIT.HAMode.Abstractions;
|
||||
using MaksIT.HAMode.Etcd;
|
||||
using MaksIT.HAMode.Extensions;
|
||||
|
||||
public sealed class MyEtcdLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseEtcdConnectionProvider {
|
||||
public string Endpoints => cfg["Configuration:Etcd:Endpoints"]!; // ex: http://etcd:2379
|
||||
@ -100,8 +99,7 @@ public sealed class MyEtcdLeaseConnectionProvider(IConfiguration cfg) : IRuntime
|
||||
public string KeyPrefix => "my-app/runtime-leases/";
|
||||
}
|
||||
|
||||
builder.Services.AddSingleton<IRuntimeLeaseEtcdConnectionProvider, MyEtcdLeaseConnectionProvider>();
|
||||
builder.Services.AddSingleton<IRuntimeLeaseService, RuntimeLeaseServiceEtcd>();
|
||||
builder.Services.AddHAModeEtcd<MyEtcdLeaseConnectionProvider>();
|
||||
```
|
||||
|
||||
### Runtime acquire/release flow
|
||||
@ -147,7 +145,7 @@ In `MaksIT.Vault.Engine.csproj`:
|
||||
|
||||
```xml
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MaksIT.HAMode" Version="0.1.0" />
|
||||
<PackageReference Include="MaksIT.HAMode" Version="1.0.1" />
|
||||
</ItemGroup>
|
||||
```
|
||||
|
||||
@ -209,7 +207,7 @@ In `MaksIT.CertsUI.Engine.csproj`:
|
||||
|
||||
```xml
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MaksIT.HAMode" Version="0.1.0" />
|
||||
<PackageReference Include="MaksIT.HAMode" Version="1.0.1" />
|
||||
</ItemGroup>
|
||||
```
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MaksIT.Results" Version="2.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="11.0.0-preview.5.26302.115" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -34,9 +34,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="dotnet-etcd" Version="8.1.0" />
|
||||
<PackageReference Include="Google.Protobuf" Version="3.33.2" />
|
||||
<PackageReference Include="Google.Protobuf" Version="3.35.1" />
|
||||
<PackageReference Include="MaksIT.Results" Version="2.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="11.0.0-preview.5.26302.115" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MaksIT.Results" Version="2.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="11.0.0-preview.5.26302.115" />
|
||||
<PackageReference Include="Npgsql" Version="10.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -34,8 +34,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MaksIT.Results" Version="2.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.8" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.58" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="11.0.0-preview.5.26302.115" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="3.0.47-preview" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -14,11 +14,11 @@
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="4.0.0-pre.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="xunit.v3" Version="3.2.2" />
|
||||
<PackageReference Include="xunit.v3" Version="4.0.0-pre.128" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
80
src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs
Normal file
80
src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs
Normal file
@ -0,0 +1,80 @@
|
||||
using MaksIT.HAMode.Abstractions;
|
||||
using MaksIT.HAMode.Etcd;
|
||||
using MaksIT.HAMode.PostgreSql;
|
||||
using MaksIT.HAMode.Redis;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace MaksIT.HAMode.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// DI registration helpers for HAMode abstractions and backend implementations.
|
||||
/// </summary>
|
||||
public static class ServiceCollectionExtensions {
|
||||
/// <summary>
|
||||
/// Registers default runtime instance id provider as singleton.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddHAModeRuntimeInstanceId(this IServiceCollection services) {
|
||||
services.AddSingleton<IRuntimeInstanceId, RuntimeInstanceIdProvider>();
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers only PostgreSQL-backed runtime lease service.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddHAModePostgreSqlLease<TConnectionProvider>(this IServiceCollection services)
|
||||
where TConnectionProvider : class, IRuntimeLeaseConnectionStringProvider {
|
||||
services.AddSingleton<IRuntimeLeaseConnectionStringProvider, TConnectionProvider>();
|
||||
services.AddSingleton<IRuntimeLeaseService, RuntimeLeaseServiceNpgsql>();
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers full PostgreSQL HA mode scenario.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddHAModePostgreSql<TConnectionProvider>(this IServiceCollection services)
|
||||
where TConnectionProvider : class, IRuntimeLeaseConnectionStringProvider {
|
||||
return services
|
||||
.AddHAModeRuntimeInstanceId()
|
||||
.AddHAModePostgreSqlLease<TConnectionProvider>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers only Redis-backed runtime lease service.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddHAModeRedisLease<TConnectionProvider>(this IServiceCollection services)
|
||||
where TConnectionProvider : class, IRuntimeLeaseRedisConnectionProvider {
|
||||
services.AddSingleton<IRuntimeLeaseRedisConnectionProvider, TConnectionProvider>();
|
||||
services.AddSingleton<IRuntimeLeaseService, RuntimeLeaseServiceRedis>();
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers full Redis HA mode scenario.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddHAModeRedis<TConnectionProvider>(this IServiceCollection services)
|
||||
where TConnectionProvider : class, IRuntimeLeaseRedisConnectionProvider {
|
||||
return services
|
||||
.AddHAModeRuntimeInstanceId()
|
||||
.AddHAModeRedisLease<TConnectionProvider>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers only etcd-backed runtime lease service.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddHAModeEtcdLease<TConnectionProvider>(this IServiceCollection services)
|
||||
where TConnectionProvider : class, IRuntimeLeaseEtcdConnectionProvider {
|
||||
services.AddSingleton<IRuntimeLeaseEtcdConnectionProvider, TConnectionProvider>();
|
||||
services.AddSingleton<IRuntimeLeaseService, RuntimeLeaseServiceEtcd>();
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers full etcd HA mode scenario.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddHAModeEtcd<TConnectionProvider>(this IServiceCollection services)
|
||||
where TConnectionProvider : class, IRuntimeLeaseEtcdConnectionProvider {
|
||||
return services
|
||||
.AddHAModeRuntimeInstanceId()
|
||||
.AddHAModeEtcdLease<TConnectionProvider>();
|
||||
}
|
||||
}
|
||||
@ -6,10 +6,10 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<NoWarn>$(NoWarn);CS1591</NoWarn>
|
||||
<IncludeBuildOutput>false</IncludeBuildOutput>
|
||||
<IncludeBuildOutput>true</IncludeBuildOutput>
|
||||
|
||||
<PackageId>MaksIT.HAMode</PackageId>
|
||||
<Version>1.0.0</Version>
|
||||
<Version>1.0.1</Version>
|
||||
<Authors>Maksym Sadovnychyy</Authors>
|
||||
<Company>MAKS-IT</Company>
|
||||
<Product>MaksIT.HAMode</Product>
|
||||
@ -32,34 +32,19 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MaksIT.HAMode.Abstractions\MaksIT.HAMode.Abstractions.csproj" />
|
||||
<ProjectReference Include="..\MaksIT.HAMode.PostgreSql\MaksIT.HAMode.PostgreSql.csproj" />
|
||||
<ProjectReference Include="..\MaksIT.HAMode.Redis\MaksIT.HAMode.Redis.csproj" />
|
||||
<ProjectReference Include="..\MaksIT.HAMode.Etcd\MaksIT.HAMode.Etcd.csproj" />
|
||||
<ProjectReference Include="..\MaksIT.HAMode.Abstractions\MaksIT.HAMode.Abstractions.csproj" PrivateAssets="all" TreatAsPackageReference="false" />
|
||||
<ProjectReference Include="..\MaksIT.HAMode.PostgreSql\MaksIT.HAMode.PostgreSql.csproj" PrivateAssets="all" TreatAsPackageReference="false" />
|
||||
<ProjectReference Include="..\MaksIT.HAMode.Redis\MaksIT.HAMode.Redis.csproj" PrivateAssets="all" TreatAsPackageReference="false" />
|
||||
<ProjectReference Include="..\MaksIT.HAMode.Etcd\MaksIT.HAMode.Etcd.csproj" PrivateAssets="all" TreatAsPackageReference="false" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="dotnet-etcd" Version="8.1.0" />
|
||||
<PackageReference Include="Google.Protobuf" Version="3.33.2" />
|
||||
<PackageReference Include="Google.Protobuf" Version="3.35.1" />
|
||||
<PackageReference Include="MaksIT.Results" Version="2.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="11.0.0-preview.5.26302.115" />
|
||||
<PackageReference Include="Npgsql" Version="10.0.3" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.58" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="..\MaksIT.HAMode.Abstractions\bin\$(Configuration)\$(TargetFramework)\MaksIT.HAMode.Abstractions.*"
|
||||
Pack="true"
|
||||
PackagePath="lib\$(TargetFramework)\" />
|
||||
<None Include="..\MaksIT.HAMode.PostgreSql\bin\$(Configuration)\$(TargetFramework)\MaksIT.HAMode.PostgreSql.*"
|
||||
Pack="true"
|
||||
PackagePath="lib\$(TargetFramework)\" />
|
||||
<None Include="..\MaksIT.HAMode.Redis\bin\$(Configuration)\$(TargetFramework)\MaksIT.HAMode.Redis.*"
|
||||
Pack="true"
|
||||
PackagePath="lib\$(TargetFramework)\" />
|
||||
<None Include="..\MaksIT.HAMode.Etcd\bin\$(Configuration)\$(TargetFramework)\MaksIT.HAMode.Etcd.*"
|
||||
Pack="true"
|
||||
PackagePath="lib\$(TargetFramework)\" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="3.0.47-preview" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user