♻️ I have no idea what I have done
This commit is contained in:
@ -12,7 +12,7 @@ public static class DysonAuthStartup
|
||||
IConfiguration configuration
|
||||
)
|
||||
{
|
||||
services.AddSingleton(sp =>
|
||||
services.AddSingleton<AuthService.AuthServiceClient>(sp =>
|
||||
{
|
||||
var etcdClient = sp.GetRequiredService<IEtcdClient>();
|
||||
var config = sp.GetRequiredService<IConfiguration>();
|
||||
@ -20,9 +20,12 @@ public static class DysonAuthStartup
|
||||
var clientKeyPath = config["ClientKey:Path"];
|
||||
var clientCertPassword = config["ClientCert:Password"];
|
||||
|
||||
return GrpcClientHelper.CreateAuthServiceClient(etcdClient, clientCertPath, clientKeyPath, clientCertPassword);
|
||||
return GrpcClientHelper
|
||||
.CreateAuthServiceClient(etcdClient, clientCertPath, clientKeyPath, clientCertPassword)
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
});
|
||||
|
||||
|
||||
services.AddAuthentication(options =>
|
||||
{
|
||||
options.DefaultAuthenticateScheme = AuthConstants.SchemeName;
|
||||
|
@ -11,10 +11,17 @@ public class RegistryHostedService(
|
||||
)
|
||||
: IHostedService
|
||||
{
|
||||
private CancellationTokenSource? _cts;
|
||||
|
||||
public async Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var serviceName = configuration["Service:Name"];
|
||||
var serviceUrl = configuration["Service:Url"];
|
||||
var insecure = configuration.GetValue<bool>("Etcd:Insecure");
|
||||
var remote = configuration.GetConnectionString("Etcd");
|
||||
|
||||
if (insecure)
|
||||
logger.LogWarning("Etcd is configured to use insecure channel.");
|
||||
|
||||
if (string.IsNullOrEmpty(serviceUrl) || string.IsNullOrEmpty(serviceName))
|
||||
{
|
||||
@ -22,10 +29,16 @@ public class RegistryHostedService(
|
||||
return;
|
||||
}
|
||||
|
||||
logger.LogInformation("Registering service {ServiceName} at {ServiceUrl} with Etcd.", serviceName, serviceUrl);
|
||||
logger.LogInformation(
|
||||
"Registering service {ServiceName} at {ServiceUrl} with Etcd ({Remote}).",
|
||||
serviceName,
|
||||
serviceUrl,
|
||||
remote
|
||||
);
|
||||
try
|
||||
{
|
||||
await serviceRegistry.RegisterService(serviceName, serviceUrl);
|
||||
_cts = new CancellationTokenSource();
|
||||
await serviceRegistry.RegisterService(serviceName, serviceUrl, cancellationToken: _cts.Token);
|
||||
logger.LogInformation("Service {ServiceName} registered successfully.", serviceName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -36,6 +49,8 @@ public class RegistryHostedService(
|
||||
|
||||
public async Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_cts?.Cancel();
|
||||
|
||||
// The lease will expire automatically if the service stops ungracefully.
|
||||
var serviceName = configuration["Service:Name"];
|
||||
if (serviceName is not null)
|
||||
|
@ -2,12 +2,13 @@ using System.Text;
|
||||
using dotnet_etcd.interfaces;
|
||||
using Etcdserverpb;
|
||||
using Google.Protobuf;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace DysonNetwork.Shared.Registry;
|
||||
|
||||
public class ServiceRegistry(IEtcdClient etcd)
|
||||
public class ServiceRegistry(IEtcdClient etcd, ILogger<ServiceRegistry> logger)
|
||||
{
|
||||
public async Task RegisterService(string serviceName, string serviceUrl, long leaseTtlSeconds = 60)
|
||||
public async Task RegisterService(string serviceName, string serviceUrl, long leaseTtlSeconds = 60, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var key = $"/services/{serviceName}";
|
||||
var leaseResponse = await etcd.LeaseGrantAsync(new LeaseGrantRequest { TTL = leaseTtlSeconds });
|
||||
@ -17,7 +18,18 @@ public class ServiceRegistry(IEtcdClient etcd)
|
||||
Value = ByteString.CopyFrom(serviceUrl, Encoding.UTF8),
|
||||
Lease = leaseResponse.ID
|
||||
});
|
||||
await etcd.LeaseKeepAlive(leaseResponse.ID, CancellationToken.None);
|
||||
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await etcd.LeaseKeepAlive(leaseResponse.ID, cancellationToken);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError($"Lease keep-alive failed: {ex.Message}");
|
||||
}
|
||||
}, cancellationToken);
|
||||
}
|
||||
|
||||
public async Task UnregisterService(string serviceName)
|
||||
|
Reference in New Issue
Block a user