Публикация DeadLetters в кластере без возможности присоединиться к кластеру приводит к утечке памяти - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть служба, которая запускается и пытается присоединиться к ее семенному узлу.Кроме того, любые мертвые письма, которые получает сервисный узел, должны публиковаться в кластере, чтобы о них можно было сообщить на приборную панель.Мои настройки там выглядят следующим образом:

_deadLetterActor = system.ActorOf(Props.Create(() => new DeadLetterPublisherActor(
    config, LoggingService
)));

system.EventStream.Subscribe(_deadLetterActor, typeof(DeadLetter));

Обработчик в этом действующем субъекте ничего не делает, кроме как связывает сообщение и публикует его в кластере:

var mediator = DistributedPubSub.Get(Context.System).Mediator;
var pubsubMessage = new Publish(
    topic: _config.Cluster.DeadLetterPublishTopic, 
    message: bundledMessage
);

mediator.Tell(pubsubMessage);

Когда служба запускается иоднако, он не может присоединиться к своему начальному узлу, память просто увеличивается до тех пор, пока процесс не завершится.

Я думаю, это имеет некоторый смысл, поскольку он не может присоединиться к кластеру, поэтому ошибки просто накапливаются.Мой вопрос: как обойти это?

Я подумал, что могу просто позаимствовать эту идею https://stackoverflow.com/a/34197270/1060314 и начать публикацию Deadletter, только если мой узел присоединился к кластеру.

Я понял, как я делаю бесконечный цикл.Он не может присоединиться к кластеру, который запускает DeadLetter, который будет публиковать, который будет запускать другой DeadLetter, и теперь у нас есть бесконечность.это даже не в кластере.

...