返信の概念を直接サポートしていない外部メッセージング システムとの統合を処理する Akka 1.3 コードがあります。コードベースを Akka 2.0 にアップグレードしようとしていますが、問題が発生しています。これは、既存の設計が ConcurrentHashMap にキーを生成し、senderFuture を使用してクリーンアップすることで「応答」メカニズムをシミュレートすることに依存しているためです。
ディスパッチを処理しているアクターに送信されるメッセージは、応答を期待している場合とそうでない場合があります。また、応答を期待している場合でも、ネットワークを介して送信された後、応答が得られない場合があります。結果として、HashMap は実際に返信が必要なメッセージ (伝えるのではなく尋ねる) のエントリのみを格納する必要があり、返信を受信しなかったエントリを一掃するための何らかの形式のクリーンアップ メカニズムが必要です。
Akka 1.3 では、senderFuture にアタッチすることでこれを行っているため、メッセージを送信したアクターがタイムアウトして応答をあきらめると、HashMap の対応するエントリも削除されます。
if (self.senderFuture().isDefined) {
pendingRequests.put(replyToKey, sender)
self.senderFuture().get.onComplete( f => {
pendingRequests.remove(replyToKey)
}
}
Akka 2.0 では、senderFuture へのアクセシビリティが削除されたので、このシナリオをきれいに処理する方法はありますか? それとも、ゼロからクリーンアップ プロセスを作成する必要がありますか?