簡體   English   中英

如何在akka.net中修復actor路徑

[英]How to fix actor path in akka.net

aktor path = akka://SchedulerAutoAction/user/TaskScheduleraktor
[INFO][7/1/2019 5:22:32 AM][Thread 0007][akka://SchedulerAutoAction/user/TaskScheduleraktor/$a] Message Messages from akka://SchedulerAutoAction/deadLetters to akka://SchedulerAutoAction/user/TaskScheduleraktor/$a was not delivered. 1 dead letters encountered.

從日志中可以看到,actor路徑和日志路徑是不同的,甚至在路徑的末尾也附加了$ a。 我想糾正演員路徑,所以這是我的缺點。

var config = ConfigurationFactory.ParseString(@"configuration {
                akka {
                   io {
                       pinned-dispatcher {
                            type = PinnedDispatcher
                       }
                   }
                }
            }");

            using (_actorSystem = ActorSystem.Create("SchedulerAutoAction", config.GetConfig("configuration")))
            {
                /* create an actor ref */
                _actorRef = _actorSystem.ActorOf(Props.Create<TaskSchedulerAktor>(() => new TaskSchedulerAktor(mongosettings, dbContext))
                             .WithRouter(new RoundRobinPool(2).WithDispatcher("akka.io.pinned-dispathcer")), "TaskScheduleraktor");

                Console.WriteLine($"aktor path = {_actorRef.Path}");

                var delay = TimeSpan.FromMinutes(TaskExecution.task_execution_interval);
                /* schedule repeatedly */
                _actorSystem.Scheduler.ScheduleTellRepeatedly(TimeSpan.FromMinutes(0), delay, _actorRef, new Messages(), ActorRefs.NoSender);
            }

有誰能幫我解決這個問題?

Akka.NET文檔中所述,池路由器是使用父子層次結構實現的。 當您創建一個配置為路由器的角色時,實際上是在創建一個非常輕量的角色(在您的情況下,該角色的路徑為akka:// SchedulerAutoAction / user / TaskScheduleraktor ),該角色下方保留了一組子代(路由),它將接收到的消息轉發到的位置。 這就是Akka.NET路由器處理並發的方式。

路由是作為路由器的匿名子代創建的,因此其角色路徑與帶有自動生成的后綴( $ a$ b$ c等)的父代路徑相同,從而可以唯一地識別每個路由。

您無法更改角色的路徑,因為它描述了角色在層次結構中的確切位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM