28 lines
913 B
C#
28 lines
913 B
C#
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);
|
|
}
|
|
} |