Partager via


IParitionLoadBalancingStrategy Interface

Définition

Une stratégie définit les baux qui doivent être pris par l’hôte actuel dans un certain moment.

public interface IParitionLoadBalancingStrategy
type IParitionLoadBalancingStrategy = interface
Public Interface IParitionLoadBalancingStrategy

Exemples

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;
    }
}

Remarques

Il peut définir un nouveau Properties pour tous les baux retournés si nécessaire, y compris les baux actuellement détenus.

Méthodes

SelectLeasesToTake(IEnumerable<ILease>)

Sélectionnez les baux qui doivent être pris pour traitement. Cette méthode est appelée régulièrement avec LeaseAcquireInterval

S’applique à