♻️ Mix things up

This commit is contained in:
2025-07-13 01:55:35 +08:00
parent 4a7f2e18b3
commit e66abe2e0c
19 changed files with 546 additions and 78 deletions

View File

@@ -0,0 +1,28 @@
using System.Text;
using dotnet_etcd.interfaces;
using Etcdserverpb;
using Google.Protobuf;
namespace DysonNetwork.Shared.Registry;
public class ServiceRegistry(IEtcdClient etcd)
{
public async Task RegisterService(string serviceName, string serviceUrl, long leaseTtlSeconds = 60)
{
var key = $"/services/{serviceName}";
var leaseResponse = await etcd.LeaseGrantAsync(new LeaseGrantRequest { TTL = leaseTtlSeconds });
await etcd.PutAsync(new PutRequest
{
Key = ByteString.CopyFrom(key, Encoding.UTF8),
Value = ByteString.CopyFrom(serviceUrl, Encoding.UTF8),
Lease = leaseResponse.ID
});
await etcd.LeaseKeepAlive(leaseResponse.ID, CancellationToken.None);
}
public async Task UnregisterService(string serviceName)
{
var key = $"/services/{serviceName}";
await etcd.DeleteAsync(key);
}
}

View File

@@ -0,0 +1,23 @@
using dotnet_etcd.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace DysonNetwork.Shared.Registry;
public static class EtcdStartup
{
public static IServiceCollection AddEtcdService(
this IServiceCollection services,
IConfiguration configuration
)
{
services.AddEtcdClient(options =>
{
options.ConnectionString = configuration.GetConnectionString("Etcd");
options.UseInsecureChannel = configuration.GetValue<bool>("Etcd:Insecure");
});
services.AddSingleton<ServiceRegistry>();
return services;
}
}