Beispiel #1
0
            // background task that connect members
            async Task ConnectMembers(MemberConnectionQueue memberConnectionQueue, CancellationToken cancellationToken)
            {
                await foreach (var(member, token) in memberConnectionQueue.WithCancellation(cancellationToken))
                {
                    await mutex.WaitAsync().CfAwait();

                    if (!token.IsCancellationRequested)
                    {
                        addresses.Add(member.Address);
                    }
                    mutex.Release();
                }
            }
        /// <summary>
        /// Initializes a new instance of the <see cref="ClusterMembers"/> class.
        /// </summary>
        /// <param name="clusterState">The cluster state.</param>
        /// <param name="terminateConnections">The terminate connections task.</param>
        public ClusterMembers(ClusterState clusterState, TerminateConnections terminateConnections)
        {
            HConsole.Configure(x => x.Configure <ClusterMembers>().SetPrefix("CLUST.MBRS"));

            _clusterState         = clusterState;
            _terminateConnections = terminateConnections;
            _loadBalancer         = clusterState.Options.LoadBalancer.Service ?? new RandomLoadBalancer();

            _logger = _clusterState.LoggerFactory.CreateLogger <ClusterMembers>();

            _members = new MemberTable();

            // members to connect
            if (clusterState.IsSmartRouting)
            {
                _memberConnectionQueue = new MemberConnectionQueue(clusterState.LoggerFactory);
            }
        }