Actors ReceiveAsync方法无法将数据POST到侦听器

时间:2016-06-23 14:39:48

标签: akka.net

背景
    通知服务有一个Notify方法,它在事件发生时被调用,所以我在这里创建FloorActor并将包含数据和发布网址的消息发送给Actor。

public class NotificationService
    {
        //HttpClient client = new HttpClient();
        ActorSystem notificationSystem = ActorSystem.Create("NotificationSystem");

        public void Notify(int clientID, FloorEventData data)
        {
            try
            {
                string postUrl = "http://localhost:6001";
                FloorData floorData = new FloorData() { Data = data,PostURL=postUrl };

//This commented line of code post data and listener gets the POST request
//client.PostAsJsonAsync<FloorEventData>(postUrl, data); 
                //Create Floor Actor
                var floorActor = notificationSystem.ActorOf<FloorActor>("floorActor");
                floorActor.Tell(data);
            }
            catch (Exception exception)
            {
                //Log exception
            }
        }
}

Floor Actor数据的ReceiveAsync方法只是将事件数据发布到指定的URL。用于实现Actor模型的框架:Akka.Net

     public class FloorActor : ReceiveActor 
    {
        HttpClient client = new HttpClient();

        public FloorActor()
        {
            ReceiveAsync<FloorData>(floorActor => client.PostAsJsonAsync<FloorEventData>(floorActor.PostURL, floorActor.Data));
        }
    }

期 -     当我调试问题时,代码流按预期工作: -     1)事件发生时调用Notify方法     2)Notify方法创建Floor Actor并发送数据     3)调用Floor Actor的ReceiveAsync方法,并且执行代码行没有任何错误或异常。但是POST监听器,没有得到POST数据请求,所以不确定发生了什么?

直接从Notify方法尝试POST数据,侦听器获取POST请求。您可以在Notify方法中看到上面评论的这段代码片段。

因此,当我尝试从我的Actor的Receive方法中发布数据时,Http侦听器无法获取请求,并且没有错误或异常。 如果我需要改变什么,请告诉我?

1 个答案:

答案 0 :(得分:0)

应将ActorSystem视为整个系统的单例。所以把那个实例放在一个静态的地方并从那里引用它。

还尝试在client.PostAsJsonAsync

上等待