public static async Task UnregisterObservableAsync(string topic, EntityId observerEntityId, EntityId observableEntityId, List <EntityId> observerList) { for (int k = 1; k <= ConfigurationHelper.MaxQueryRetryCount; k++) { try { if (observerEntityId.Kind == EntityKind.Actor) { IServerObserverActor actorProxy = ActorProxy.Create <IServerObserverActor>(observerEntityId.ActorId, observerEntityId.ServiceUri); await actorProxy.UnregisterObservableAsync(topic, observableEntityId, observerList); } else { IServerObserverService serviceProxy = observerEntityId.PartitionKey.HasValue ? ServiceProxy.Create <IServerObserverService>( observerEntityId.ServiceUri, new ServicePartitionKey(observerEntityId.PartitionKey.Value)) : ServiceProxy.Create <IServerObserverService>(observerEntityId.ServiceUri); await serviceProxy.UnregisterObservableAsync(topic, observableEntityId, observerList); } return; } catch (FabricTransientException ex) { ActorEventSource.Current.Error(ex); if (k == ConfigurationHelper.MaxQueryRetryCount) { throw; } } catch (AggregateException ex) { foreach (Exception innerException in ex.InnerExceptions) { ActorEventSource.Current.Error(innerException); } if (k == ConfigurationHelper.MaxQueryRetryCount) { throw; } } catch (Exception ex) { ActorEventSource.Current.Error(ex); if (k == ConfigurationHelper.MaxQueryRetryCount) { throw; } } await Task.Delay(ConfigurationHelper.BackoffQueryDelay); } }
public static async Task NotifyObserverAsync( string topic, Message message, EntityId observerEntityId, EntityId observableEntityId, List <EntityId> observerList) { for (int k = 1; k <= ConfigurationHelper.MaxQueryRetryCount; k++) { try { if (observerEntityId.Kind == EntityKind.Actor) { IServerObserverActor actorProxy = ActorProxy.Create <IServerObserverActor>(observerEntityId.ActorId, observerEntityId.ServiceUri); await actorProxy.NotifyObserverAsync(topic, message, observableEntityId, observerList); } else { IServerObserverService serviceProxy = observerEntityId.PartitionKey.HasValue ? ServiceProxy.Create <IServerObserverService>( observerEntityId.ServiceUri, new ServicePartitionKey(observerEntityId.PartitionKey.Value)) : ServiceProxy.Create <IServerObserverService>(observerEntityId.ServiceUri); await serviceProxy.NotifyObserverAsync(topic, message, observableEntityId, observerList); } return; } catch (FabricTransientException ex) { ActorEventSource.Current.Error(ex); } catch (AggregateException ex) { foreach (Exception innerException in ex.InnerExceptions) { ActorEventSource.Current.Error(innerException); } } catch (Exception ex) { ActorEventSource.Current.Error(ex); } await Task.Delay(ConfigurationHelper.BackoffQueryDelay); } WriteMessageToMessageBoxAsync(observerEntityId.EntityUri, message).Wait(); if ((observerList != null) && observerList.Any()) { Tuple <EntityId, List <EntityId> > tuple = GetObserverProxyAndList(observerList, true); await NotifyObserverAsync(topic, message, tuple.Item1, observableEntityId, tuple.Item2); } }