如何在F#中订阅和查看死信

时间:2016-05-25 10:25:13

标签: f# akka dead-letter

我已经尝试使用以下代码来查看/捕获死信,但它没有以应有的方式工作。我错过了什么。完全?我的目的只是查看正在传递给行动者演员的所有死信。

let system = ActorSystem.Create("FSharp")

let echoServer = 
spawn system "EchoServer"
<| fun mailbox ->
    let rec loop() =
        actor {
            let! message = mailbox.Receive()
            match box message with
            | :? string -> 
                printfn "Echo '%s'" message
                return! loop()
            | _ ->  failwith "unknown message"
        } 
    loop()

let boolval = system.EventStream.Subscribe(echoServer,typedefof<DeadLetterActorRef>)
echoServer.Tell("First Message")
echoServer.Tell("Second Message")
system.DeadLetters.Tell("Dead Message") 

1 个答案:

答案 0 :(得分:3)

当您订阅活动总线时,您正在订阅发布到总线的消息类型。在您发布的代码中,您将订阅者注册到DeadLetterActorRef消息,而死信以DeadLetter消息的形式发布。因此,在您的情况下,您只需将订阅更改为

let boolval = system.EventStream.Subscribe(echoServer, typeof<DeadLetter>)