次の方法で共有


IParitionLoadBalancingStrategy インターフェイス

定義

戦略では、特定の時点で現在のホストが取得する必要があるリースを定義します。

public interface IParitionLoadBalancingStrategy
type IParitionLoadBalancingStrategy = interface
Public Interface IParitionLoadBalancingStrategy

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

注釈

現在所有しているリースを含め、必要に応じて返されるすべてのリースに対して新規 Properties に設定できます。

メソッド

SelectLeasesToTake(IEnumerable<ILease>)

処理のために取得する必要があるリースを選択します。 このメソッドは、 で定期的に呼び出されます。 LeaseAcquireInterval

適用対象