Akka.Remote.EndpointRegistry.MarkAsFailed C# (CSharp) Метод

MarkAsFailed() публичный Метод

Marking an endpoint as failed means that we will not try to connect to the remote system within the gated period but it is ok for the remote system to try to connect with us (inbound-only.)
public MarkAsFailed ( IActorRef endpoint, Akka.Remote.Deadline timeOfRelease ) : void
endpoint IActorRef
timeOfRelease Akka.Remote.Deadline
Результат void
        public void MarkAsFailed(IActorRef endpoint, Deadline timeOfRelease)
        {
            if (IsWritable(endpoint))
            {
                _addressToWritable[_writableToAddress[endpoint]] = new EndpointManager.Gated(timeOfRelease);
                _writableToAddress.Remove(endpoint);
            }
            else if (IsReadOnly(endpoint))
            {
                _addressToReadonly.Remove(_readonlyToAddress[endpoint]);
                _readonlyToAddress.Remove(endpoint);
            }
        }

Usage Example

Пример #1
0
        protected override SupervisorStrategy SupervisorStrategy()
        {
            return(new OneForOneStrategy(ex =>
            {
                var directive = Directive.Stop;

                ex.Match()
                .With <InvalidAssociation>(ia =>
                {
                    log.Warning("Tried to associate with unreachable remote address [{0}]. " +
                                "Address is now gated for {1} ms, all messages to this address will be delivered to dead letters. Reason: [{2}]",
                                ia.RemoteAddress, settings.RetryGateClosedFor.TotalMilliseconds, ia.Message);
                    endpoints.MarkAsFailed(Sender, Deadline.Now + settings.RetryGateClosedFor);
                    AddressTerminatedTopic.Get(Context.System).Publish(new AddressTerminated(ia.RemoteAddress));
                    directive = Directive.Stop;
                })
                .With <ShutDownAssociation>(shutdown =>
                {
                    log.Debug("Remote system with address [{0}] has shut down. " +
                              "Address is not gated for {1}ms, all messages to this address will be delivered to dead letters.",
                              shutdown.RemoteAddress, settings.RetryGateClosedFor.TotalMilliseconds);
                    endpoints.MarkAsFailed(Sender, Deadline.Now + settings.RetryGateClosedFor);
                    AddressTerminatedTopic.Get(Context.System).Publish(new AddressTerminated(shutdown.RemoteAddress));
                    directive = Directive.Stop;
                })
                .With <HopelessAssociation>(hopeless =>
                {
                    if (settings.QuarantineDuration.HasValue && hopeless.Uid.HasValue)
                    {
                        endpoints.MarkAsQuarantined(hopeless.RemoteAddress, hopeless.Uid.Value,
                                                    Deadline.Now + settings.QuarantineDuration.Value);
                        eventPublisher.NotifyListeners(new QuarantinedEvent(hopeless.RemoteAddress,
                                                                            hopeless.Uid.Value));
                    }
                    else
                    {
                        log.Warning("Association to [{0}] with unknown UID is irrecoverably failed. " +
                                    "Address cannot be quarantined without knowing the UID, gating instead for {1} ms.",
                                    hopeless.RemoteAddress, settings.RetryGateClosedFor.TotalMilliseconds);
                        endpoints.MarkAsFailed(Sender, Deadline.Now + settings.RetryGateClosedFor);
                    }
                    AddressTerminatedTopic.Get(Context.System).Publish(new AddressTerminated(hopeless.RemoteAddress));
                    directive = Directive.Stop;
                })
                .Default(msg =>
                {
                    if (msg is EndpointDisassociatedException || msg is EndpointAssociationException)
                    {
                    }                                                                                         //no logging
                    else
                    {
                        log.Error(ex, ex.Message);
                    }
                });

                return directive;
            }));
        }
All Usage Examples Of Akka.Remote.EndpointRegistry::MarkAsFailed