/// <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); }
/// <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); }
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; } }