2016-05-25 7 views
0

デッドレターを表示/キャプチャするために以下のコードを試しましたが、それはすべきではありません。私が行方不明になっている。正確には?私の目的は、デッドレターの俳優に配信されているすべての死んだ手紙を見るだけです。Fのデッドレターを購読して表示する方法

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") 
+0

どのように機能していないのですか? –

+0

それがうまくいかない場合は、おそらくあなたが持っているべきことをしていないでしょう。 :-) –

+0

私は上記のコードを少し変更しました。 @John DeadLetters.Tell()を使用しているときはいつでも、メッセージはデッドレターのアクタに送信されます。しかし、コードで私はDeadLettersを購読しました。これは今、DeadLettersの代わりにすべてのデッド・レター・メッセージをechoServerアクターに送信することを意味します –

答えて

3

イベントバスを購読すると、バスに発行されたメッセージのタイプに加入しています。投稿したコードでは、DeadLetterActorRefメッセージにサブスクライバを登録しましたが、デッドレターはDeadLetterメッセージの形式で公開されていました。あなたの場合、サブスクリプションを

に変更する必要があります
let boolval = system.EventStream.Subscribe(echoServer, typeof<DeadLetter>) 
関連する問題