# 第8章 アクターの構造パターン
- 副読本 [Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions](https://www.amazon.co.jp/dp/B007MQLL4E/)
- [oreilly safari版](https://learning.oreilly.com/library/view/enterprise-integration-patterns/0321200683/)
#### 疑問
#### 感想
## 8.1 パイプ&フィルター
#### 疑問
#### 感想
- POSAにもアーキテクチャパターンとして載ってなーとか思い出した(手元に無いので未確認)
## 8.2 エンタープライズインテグレーションパターン ─ スキャッタギャザー
#### 疑問
#### 感想
- リスト8.7 タイムアウトの実装(p.208) の例は、akka-typedだともうひと工夫必要そうだなと思った
- `PhotoMessage`と`TimeoutMessage`は型が違うので
- > アグリゲータがなにか失敗すると、アグリゲータが再起動するため、すでに受信したすべてのメッセージが失われます。どうすればこの問題を解決できるでしょうか? アクターが再起動する前にpreRestartメソッドが呼び出されます。このメソッドを使うことで状態を保持できます。このアグリゲータの場合、再起動する前にメッセージを再送信するというシンプルな解決策があります。(p.209)
- どういうことかよくわからなかったけど、リスト8.8を見て理解した。再送されるメッセージとは、当該actorのmailboxに保持されているメッセージのこと
- これからわかることは、mailbox自体はactorではなくActorSystemが管理しているってことか。どこかに書いてあったかしら
- Scatter-GatherパターンについてのEIPにおける解説(DeepL翻訳)
- Chapter7 Message Routing より
- > メッセージを複数の受信者に送信する必要があり、それぞれの受信者が返信を送る可能性がある場合、全体のメッセージフローをどのように維持しますか?(How do you maintain the overall message flow when a message must be sent to multiple recipients, each of which may send a reply?)
- > 複数の受信者にメッセージをブロードキャストし、その応答を単一のメッセージに再集約するScatter-Gatherを使用します(Use a Scatter-Gather that broadcasts a message to multiple recipients and reaggregates the responses back into a single message.)。
- > Scatter-Gather は、リクエストメッセージを多数の受信者にルーティングします。Scatter-Gatherは、リクエストメッセージを多数の受信者にルーティングし、Aggregator(268)を使用してレスポンスを収集し、1つのレスポンスメッセージにまとめます(The Scatter-Gather routes a request message to a number of recipients. It then uses an Aggregator (268) to collect the responses and distill them into a single response message.)。
- Scatter-Gatherパターンって、aggregaterでのメッセージの受け取り順序は不定なので、メッセージのの合成手続き、あるいはメッセージそのもののデータ構造の設計は結構気を使う必要がありそう(意図せず後勝ちとかになると良くない)
- EIPでも、まさにそのあたりに言及したと思しき注意書きがあり。
- > アグリゲータを設計する際には、以下の特性を指定する必要があります。
> 1. 相関性[Correlation]。どの受信メッセージが一緒になっているか?
> 2. 完全性[Completeness]の条件。結果メッセージを公開する準備がいつできたか?
> 3. 集約のアルゴリズム。受信したメッセージを単一の結果メッセージにまとめるにはどうすればよいか。
>
> 相関性[Correlation]は通常、受信メッセージのタイプまたは明示的なCorrelation Identifier(163)のいずれかによって達成されます。完全性[the completeness]の条件と集約アルゴリズムの一般的な選択については、272ページで説明しています。
## 8.3 エンタープライズインテグレーションパターン ─ ルーティングスリップ(回覧票)
#### 疑問
#### 感想
- アクターによる動的なビルダーパターン、みたいな感じかなぁ。対象のライフサイクルによってはビルダーパターンでいいものもありそうだが
- EIPの実現という文脈なので、ビルダーパターンでいいような小さい粒度のものの話はしてないということだろう
## 8.4 まとめ
#### 疑問
#### 感想
- なんか大層な名前がついてるけど、やってること普通だった。
###### tags: `Akka本読書会`