MoShiro__MinAgentVersion makes the backend refuse agents below it at hello (fleet_version_required); fleet.min_server_version or MOSHIRO_MIN_SERVER_VERSION makes the agent drop a backend below it. Either side waits five seconds and shakes hands again, because the other one may be updating.
34 lines
1.6 KiB
C#
34 lines
1.6 KiB
C#
namespace Fleet.Server;
|
|
|
|
public sealed class FleetServerOptions
|
|
{
|
|
/// <summary>节点 ID 的类型前缀,MoShiro 使用 <c>agt</c>。</summary>
|
|
public string NodeIdPrefix { get; set; } = "node";
|
|
|
|
/// <summary>加入令牌的「种类」对应的节点 ID 前缀(例如 <c>edge</c> → <c>edg</c>);没有列出的种类用 <see cref="NodeIdPrefix"/>。</summary>
|
|
public Dictionary<string, string> NodeIdPrefixes { get; } = new(StringComparer.Ordinal);
|
|
|
|
public int MaxFrameBytes { get; set; } = 16 << 20;
|
|
|
|
public TimeSpan ChallengeTtl { get; set; } = TimeSpan.FromSeconds(30);
|
|
|
|
public TimeSpan HeartbeatTimeout { get; set; } = TimeSpan.FromSeconds(45);
|
|
|
|
public TimeSpan RequestTimeout { get; set; } = TimeSpan.FromSeconds(15);
|
|
|
|
/// <summary>处理节点的一条消息(心跳、hello、收件箱)最多用这么久:钩子卡在数据库或外部查询里时,不能让这条连接停在「在线」而收不到任何心跳超时。超过就断开,节点按退避重连。</summary>
|
|
public TimeSpan HandlerTimeout { get; set; } = TimeSpan.FromSeconds(30);
|
|
|
|
/// <summary>节点违反协议(方法没有声明、方向、类型或角色不对)的次数上限;超过就断开这条连接。</summary>
|
|
public int MaxViolations { get; set; } = 20;
|
|
}
|
|
|
|
/// <summary>握手时的版本要求:服务端的版本(告诉节点),以及节点至少要是哪个版本。每次握手都重新取,所以改配置不用重启。</summary>
|
|
public interface IFleetVersionPolicy
|
|
{
|
|
string? ServerVersion { get; }
|
|
|
|
/// <summary>空表示不要求。</summary>
|
|
string? MinNodeVersion { get; }
|
|
}
|