🐥

実践!インテグレーションパターン

2022/04/28に公開

概要

2022/02/09に開催された下記勉強会のメモです
https://modeling-how-to-learn.connpass.com/event/233934/

https://togetter.com/li/1843324

セッション

実践EIP入門 ― Apache CamelでEIPを使いこなす

https://docs.google.com/presentation/d/e/2PACX-1vTTmM5Ljx54uwTsywyV0yFJ_ee5ZjsDgFlbZfnqaTN2xcx6ejrjdW9OttmxagLx-GeVQLIIeGMBweKr/pub?slide=id.p

インテグレーションの基本パターン

  1. ファイル転送
  2. 共有データベース
  3. リモート手続き呼び出し(RPC)
  4. メッセージング

EIPは4.の話

https://www.enterpriseintegrationpatterns.com/patterns/messaging/

メッセージングの何が良いか

  • リアクティブ
  • 結合性の排除
  • 業務モデルの自然な実現

パターンランゲージ=単なるカタログではない

メッセージングのパターン

  • メッセージングチャネル
  • メッセージ生成
  • メッセージルーティング
  • メッセージ変換
  • メッセージエンドポイント
  • システム管理

EIPはソリューションを再利用できる

Apache CamelとEIP
https://camel.apache.org/
https://camel.apache.org/components/next/eips/enterprise-integration-patterns.html

その他参考資料
https://github.com/apache/camel-examples
https://github.com/apache/camel-spring-boot-examples
https://github.com/apache/camel-quarkus-examples
https://access.redhat.com/documentation/ja-jp/red_hat_fuse/7.10/html/apache_camel_development_guide/index
https://qiita.com/tadayosi/items/e310c825689a1ed69b08
https://zenn.dev/tadayosi/articles/d56bb322dec6f6

curlで天気予報
https://github.com/chubin/wttr.in

おまけ:

EIPの著者が書かれた有名な記事
https://code.google.com/archive/p/gregors-ramblings-ja/wikis/18_starbucks.wiki

Azureのクラウド設計パターン
https://docs.microsoft.com/ja-jp/azure/architecture/patterns/category/messaging

Camelデザインパターンの紹介
https://rheb.hatenablog.com/entry/camel-design-patterns

EIPとAkkaについて

配送保証のパターンの解説

https://www.enterpriseintegrationpatterns.com/patterns/messaging/GuaranteedMessaging.html

通信は届かない(ことがある)

アナロジー:二人の将軍問題
https://ja.wikipedia.org/wiki/二人の将軍問題

メッセージ配送の信頼性(信頼性の低い順、ただし順にコストが高くなる)

  • At-Most-Once Delivery(0または1回配送)
    • 届かないことがある
  • At-Least-Once Delivery(少なくとも1回)
    • メッセージ重複の可能性がある
    • 送信側にディスクが必要
  • Exactly-Once Delivery(正確に1回)
    • 受信側にもディスクが必要

EIPの配送保証(At-Least-Once)
メッセージングシステムがデータストアにメッセージを保存
メッセージが正常に送信されたらデータストアから削除

kafkaでは同じようなことをやっている
https://kafka.apache.org/documentation/#persistence
※永続化について、ディスクに書くと遅いんじゃないの?みたいな話あるけどそんなことないよ的なことが書いてあります(超訳ですが間違ってたらすみません)

メッセージの永続性は信頼性を高めるがパフォーマンスは犠牲になる
パターンの採用はトレードオフ

実装例サンプル
https://github.com/j5ik2o/akka-at-least-once-delivery

https://doc.akka.io/docs/akka/current/typed/reliable-delivery.html

おまけ:

JavaEE勉強会 EIP
https://www.wikihouse.com/withoutEJB/index.php?EIP

アプリケーションクラスの設計パターンとしてのEIP

EIPはアプリケーションの設計パターンとして参考になる

  • 処理の構造化(クラスの役割分担)のパターン
    • 関心事の分離:並列化
    • 関心事の分離:直列化
    • 関心の分離:分岐
    • ソース=>分割=>振分け=>個別処理=>集約
  • メッセージ内容(情報)の扱い方のパターン
    • エンリッチ:必要な情報を付加する
    • フィルター:不要な情報を取り除く
    • 荷物を預かり引換券を渡す
    • データ形式の正規化

Discussion