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

public MarkAsQuarantined ( Akka.Actor.Address address, int uid, Akka.Remote.Deadline timeOfRelease ) : void
address Akka.Actor.Address
uid int
timeOfRelease Akka.Remote.Deadline
Результат void
Пример #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;
            }));
        }
Пример #2
0
        private void KeepQuarantinedOr(Address remoteAddress, Action body)
        {
            var uid = _endpoints.RefuseUid(remoteAddress);

            if (uid.HasValue)
            {
                _log.Info(
                    "Quarantined address [{0}] is still unreachable or has not been restarted. Keeping it quarantined.",
                    remoteAddress);
                // Restoring Quarantine marker overwritten by a Pass(endpoint, refuseUid) pair while probing remote system.
                _endpoints.MarkAsQuarantined(remoteAddress, uid.Value, Deadline.Now + _settings.QuarantineDuration);
            }
            else
            {
                body();
            }
        }