You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel/Services/Network/Models/MicroserviceInfo.cs

79 lines
3.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Runtime.Serialization;
namespace ZeroLevel.Network.Microservices
{
[Serializable]
[DataContract]
public sealed class MicroserviceInfo :
IEquatable<MicroserviceInfo>
{
public const string DEFAULT_GROUP_NAME = "__service_default_group__";
public const string DEFAULT_TYPE_NAME = "__service_default_type__";
/// <summary>
/// Ключ сервиса, должен быть уникален в рамках бизнес функционала
/// т.е. с одинаковым ключом могут работать только копии сервиса, для горизонтальной балансировки
/// </summary>
[DataMember]
public string ServiceKey { get; set; }
/// <summary>
/// Группа, для фильтрации, в качетсве группы можно определять сервисы работающие в одном домене,
/// например сервисы обрабатывющие новости в одной группе, сервисы по котировкам в другой
/// </summary>
[DataMember]
public string ServiceGroup { get; set; } = DEFAULT_GROUP_NAME;
/// <summary>
/// Тип сервиса, для фильтрации, определяет принадлежность к подгруппе, например сервисы для доставки информации,
/// или сервисы-адаптеры и т.д.
/// </summary>
[DataMember]
public string ServiceType { get; set; } = DEFAULT_TYPE_NAME;
/// <summary>
/// Протокол по которому разрешен доступ к API сервиса
/// </summary>
[DataMember]
public string Protocol { get; set; }
/// <summary>
/// Точка подключения, адрес
/// </summary>
[DataMember]
public string Endpoint { get; set; }
/// <summary>
/// Версия сервиса
/// </summary>
[DataMember]
public string Version { get; set; }
public bool Equals(MicroserviceInfo other)
{
if (other == null) return false;
if (object.ReferenceEquals(this, other)) return true;
if (string.Compare(this.ServiceKey, other.ServiceKey, true) != 0) return false;
if (string.Compare(this.ServiceGroup, other.ServiceGroup, true) != 0) return false;
if (string.Compare(this.ServiceType, other.ServiceType, true) != 0) return false;
if (string.Compare(this.Endpoint, other.Endpoint, true) != 0) return false;
if (string.Compare(this.Version, other.Version, true) != 0) return false;
if (string.Compare(this.Protocol, other.Protocol, true) != 0) return false;
return true;
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return this.ServiceKey.GetHashCode() ^ this.Protocol.GetHashCode() ^ this.Endpoint.GetHashCode();
}
public override string ToString()
{
return $"{ServiceKey} ({Version})";
}
}
}

Powered by TurnKey Linux.