Compartir a través de


IParitionLoadBalancingStrategy Interfaz

Definición

Una estrategia define qué concesiones deben ser tomadas por el host actual en un momento determinado.

public interface IParitionLoadBalancingStrategy
type IParitionLoadBalancingStrategy = interface
Public Interface IParitionLoadBalancingStrategy

Ejemplos

public class CustomStrategy : IParitionLoadBalancingStrategy
{
    private string hostName;
    private string hostVersion;
    private TimeSpan leaseExpirationInterval;

    private const string VersionPropertyKey = "version";

    public IEnumerable<ILease> SelectLeasesToTake(IEnumerable<ILease> allLeases)
    {
        var takenLeases = this.FindLeasesToTake(allLeases);
        foreach (var lease in takenLeases)
        {
            lease.Properties[VersionPropertyKey] = this.hostVersion;
        }

        return takenLeases;
    }

    private IEnumerable<ILease> FindLeasesToTake(IEnumerable<ILease> allLeases)
    {
        List<ILease> takenLeases = new List<ILease>();
        foreach (var lease in allLeases)
        {
            if (string.IsNullOrWhiteSpace(lease.Owner) || this.IsExpired(lease))
            {
                takenLeases.Add(lease);
            }

            if (lease.Owner != this.hostName)
            {
                var ownerVersion = lease.Properties[VersionPropertyKey];
                if (ownerVersion < this.hostVersion)
                {
                    takenLeases.Add(lease);
                }

                // more logic for leases owned by other hosts
            }
        }

        return takenLeases;
    }

    private bool IsExpired(ILease lease)
    {
        return lease.Timestamp.ToUniversalTime() + this.leaseExpirationInterval < DateTime.UtcNow;
    }
}

Comentarios

Puede establecer una nueva Properties para todas las concesiones devueltas si es necesario, incluidas las concesiones que pertenecen actualmente.

Métodos

SelectLeasesToTake(IEnumerable<ILease>)

Seleccione concesiones que se deben tomar para su procesamiento. Se llamará a este método periódicamente con LeaseAcquireInterval

Se aplica a