53 lines
1.4 KiB
C#
53 lines
1.4 KiB
C#
using System;
|
|
|
|
namespace StellaOps.Notify.Worker;
|
|
|
|
public sealed class NotifyWorkerOptions
|
|
{
|
|
/// <summary>
|
|
/// Worker identifier prefix; defaults to machine name.
|
|
/// </summary>
|
|
public string? WorkerId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Number of messages to lease per iteration.
|
|
/// </summary>
|
|
public int LeaseBatchSize { get; set; } = 16;
|
|
|
|
/// <summary>
|
|
/// Duration a lease remains active before it becomes eligible for claim.
|
|
/// </summary>
|
|
public TimeSpan LeaseDuration { get; set; } = TimeSpan.FromSeconds(30);
|
|
|
|
/// <summary>
|
|
/// Delay applied when no work is available.
|
|
/// </summary>
|
|
public TimeSpan IdleDelay { get; set; } = TimeSpan.FromMilliseconds(250);
|
|
|
|
/// <summary>
|
|
/// Maximum number of event leases processed concurrently.
|
|
/// </summary>
|
|
public int MaxConcurrency { get; set; } = 4;
|
|
|
|
/// <summary>
|
|
/// Maximum number of consecutive failures before the worker delays.
|
|
/// </summary>
|
|
public int FailureBackoffThreshold { get; set; } = 3;
|
|
|
|
/// <summary>
|
|
/// Delay applied when the failure threshold is reached.
|
|
/// </summary>
|
|
public TimeSpan FailureBackoffDelay { get; set; } = TimeSpan.FromSeconds(5);
|
|
|
|
internal string ResolveWorkerId()
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(WorkerId))
|
|
{
|
|
return WorkerId!;
|
|
}
|
|
|
|
var host = Environment.MachineName;
|
|
return $"{host}-{Guid.NewGuid():n}";
|
|
}
|
|
}
|