Esempio n. 1
0
        /// <summary>
        /// 屏蔽
        /// </summary>
        /// <param name="serviceName"></param>
        /// <param name="failedCallInvoker"></param>
        public void Revoke(string serviceName, ChannelWrapper channelWrapper)
        {
            lock (_lock)
            {
                if (channelWrapper == null)
                {
                    return;
                }

                // channels
                if (_channelWrappers.TryGetValue(serviceName, out List <ChannelWrapper> channels) &&
                    channels.Any(oo => oo == channelWrapper))
                {
                    channels.Remove(channelWrapper);
                    _channelWrappers.AddOrUpdate(serviceName, channels, (k, v) => channels);
                }

                // add black
                ServiceBlackPolicy.Add(serviceName, channelWrapper.Target);

                channelWrapper.ShutdownAsync();

                // reinit callinvoker
                if (channels.Count <= 0)
                {
                    GetSetChannels(serviceName, false);
                }
            }
        }