예제 #1
0
        /// <summary>
        /// Cache registered instance for redo.
        /// </summary>
        /// <param name="serviceName">service name</param>
        /// <param name="groupName">group name</param>
        /// <param name="instance">registered instance</param>
        public void CacheInstanceForRedo(string serviceName, string groupName, Instance instance)
        {
            string key      = NamingUtils.GetGroupedName(serviceName, groupName);
            var    redoData = InstanceRedoData.Build(serviceName, groupName, instance);

            _registeredInstances.AddOrUpdate(key, redoData, (x, y) => redoData);
        }
예제 #2
0
        /// <summary>
        /// Build a new RedoData for register service instance.
        /// </summary>
        /// <param name="serviceName">service name for redo data</param>
        /// <param name="groupName">group name for redo data</param>
        /// <param name="instance">instance for redo data</param>
        /// <returns>new RedoData for register service instance</returns>
        public static InstanceRedoData Build(string serviceName, string groupName, Instance instance)
        {
            var result = new InstanceRedoData(serviceName, groupName)
            {
                Data = instance
            };

            return(result);
        }
예제 #3
0
        private async Task RedoForInstance(InstanceRedoData redoData)
        {
            var redoType = redoData.GetRedoType();

            string serviceName = redoData.ServiceName;
            string groupName   = redoData.GroupName;

            _logger?.LogInformation("Redo instance operation {0} for {1}@@{2}", redoType, groupName, serviceName);

            switch (redoType)
            {
            case RedoType.REGISTER:
                if (IsClientDisabled())
                {
                    return;
                }

                await _clientProxy.DoRegisterService(serviceName, groupName, redoData.Data).ConfigureAwait(false);

                break;

            case RedoType.UNREGISTER:
                if (IsClientDisabled())
                {
                    return;
                }

                await _clientProxy.DoDeregisterService(serviceName, groupName, redoData.Data).ConfigureAwait(false);

                break;

            case RedoType.REMOVE:
                _redoService.RemoveInstanceForRedo(serviceName, groupName);
                break;

            default:
                break;
            }
        }