問題タブ [eai]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 他の境界付けられたコンテキストを呼び出す戦略
私は現在、ドメイン駆動設計 (DDD) と複数ドメインの統合シナリオに関する研究プロジェクトに取り組んでいます。
集約を検証するために別の BC に連絡する必要がある、境界付けられたコンテキストの 1 つでの使用例があります。実際、将来的に検証データを要求する BC がいくつかある可能性があります (ただし、現時点ではありません)。
現在、DDD強迫性障害神経衰弱で、パターンを正しく適用する方法が見つかりません(笑)。それについて人々からのフィードバックを本当に感謝します。
2 つの境界付けられたコンテキストについて。
- ユースケースが行われている最初のもの (BC_A) には、ユーザーに関連する要素のリストが含まれます。
- 外部のもの (BC_B) はそれらの要素についてある程度の知識を持っています
* したがって、BC_A から BC_B への検証要求は、BC_A からの集約のすべての要素のレビューを要求し、それらをどうするかについての仕様を含むレポートを返します。要素 (保持する必要があるかどうか、およびその理由)。
*集約の状態は、リクエストの後に「ドラフト」、「検証中」を通過し、返送されたレポートに応じて、「有効」または「has_error」(存在する場合)になります。ユーザーが後で仕様に従わないことを選択した場合、集計の状態が「制御」に渡される可能性があります。これは、何らかのエラーがあることを意味しますが、私たちはそれを処理しません。
コマンドはValidateMyAggregateCommandです
使用例は次のとおりです。
- id で対象の集計を取得する
- その状態を「検証中」に変更します
- 集計を永続化する
- 検証呼び出しを行う (別の BC へ)
- 検証レポートを永続化する
- ターゲット集計で検証レポートを確認します (結果に応じて状態が再び変化します。「OK」または「HAS_ERROR」である必要があります)。
- 集計を再度永続化する
- 検証結果に応じてドメイン イベントを生成する
これには 8 つのステップが含まれており、1 ~ 3 トランザクションまたはそれ以上のトランザクションが含まれている可能性があります。
(UI でアクセスするために) 検証レポートのローカルを永続化する必要があり、それができると思います。
- 検証呼び出しが独立した後 (レポートは独自の集計です)
- ターゲット集約を永続化するとき(その中にあります)
私は最初のオプション (ステップ 5) を好みます。これは、より分離されているためです - ここに不変条件があると主張できたとしても (???) - レポートの永続性と、集計。
私は実際に呼び出し自体に苦労しています (ステップ 4)。
私はいくつかの方法でそれを行うことができると思います:
- A. REST 実装による同期 RPC 呼び出し
- B. 応答なしの呼び出し (無効) (ファイア アンド フォーゲット) テーブルでいくつかの実装オプションを許可する (同期/非同期)
- C. 他の BC に到達するために技術的なイベントに変換されたドメイン イベント
A. 同期 RPC 呼び出し
これvalidationService
は、REST サービス Bean を使用してインフラストラクチャ レイヤーに実装されたドメイン サービスです (ローカル検証の可能性もありますが、私のシナリオではそうではありません)。
呼び出しにはすぐに応答が必要であり、呼び出し元 (コマンド ハンドラー) は応答が返されるまでブロックされます。そのため、高い時間結合が導入されます。
技術的な理由で検証呼び出しが失敗した場合、例外が発生し、すべてをロールバックする必要があります。コマンドは後で再生する必要があります。
B. 応答なしの呼び出し (同期または非同期)
このバージョンでは、コマンド ハンドラーは集約の「検証中」状態を保持し、検証要求を起動 (および忘れ) します。
ここで、レポートの確認は、初期トランザクションの内部または外部で、同期または非同期の方法で発生する可能性があります。
上記のコードを専用のトランザクションで使用すると、検証呼び出しでの失敗を無害にすることができます (impl に再試行メカニズムがある場合)。
このソリューションにより、同期通信をすばやく簡単に開始し、後で非同期通信に切り替えることができます。だから柔軟です。
B.1. 同期実装
この場合、(インフラストラクチャ層の) validationRequestService の実装は、直接の要求/応答を行います。
レポートは専用のトランザクションで永続化され、イベントを発行すると、集計で実際の確認作業を行う 3 番目のコード フラグメント (アプリケーション レイヤー内) がアクティブ化されます。
ここでは、インフラ層からアプリ層へのイベントがあります。
B.2. 非同期
非同期バージョンは、ValidationRequestService impl (code_fragment_b1_a) の以前のソリューションを変更します。JMS/AMQP Bean を使用すると、最初にメッセージを送信し、後で個別に応答を受信できます。
メッセージング リスナーが同じ ValidationReportReceived イベントを発生させ、残りのコードは code_fragment_b1_b と同じになると思います。
この投稿を書いているとき、このソリューション (B2) は、ネットワーク通信に関してより分離され、信頼性が高いため、交換の対称性が向上し、技術的な点が改善されていることに気付きました。現時点では、それほど複雑ではありません。
C. BC 間のドメイン イベントとバス
最後の実装では、ドメイン サービスを使用して他の BC から検証を要求する代わりに、MyAggregateValidationRequested のようなドメイン イベントを発生させます。私はそれが「強制された」ドメイン イベントであることを認識しています。ユーザーが要求したことはわかりましたが、実際に会話に現れることはありませんが、それでもドメイン イベントです。
問題は、イベント ハンドラーをどこに、どのように配置するか、まだわかりません。インフラストラクチャ ハンドラはそれを直接取得する必要がありますか?
ドメインイベントを宛先に送信する前に技術イベントに変換する必要がありますか???
データ構造である場合のある種の DTO のような技術的イベント
メッセージングに関連するすべてのコードは、システム間の通信にのみ使用されるため、インフラストラクチャ レイヤー (ポート/アダプター スロット) に属していると思います。
そして、これらのパイプ内で発生/処理コードとともに転送される技術イベントは、コマンドと同様にシステム状態の変化につながるため、アプリケーション層に属している必要があります。それらはドメインを調整し、インフラによって起動されます (アプリケーション サービスを起動するコントローラーのように)。
コマンド内のイベントの変換に関するいくつかの解決策を読みましたが、システムがより複雑になり、メリットがないと思います。
したがって、私のアプリケーション ファサードは 3 種類の相互作用を公開します: - コマンド - クエリ - イベント
この分離により、コマンドを UI から、イベントを他の BC からより明確に分離できると思います。
わかりました、投稿がかなり長く、少し面倒かもしれませんが、これは私が立ち往生しているところです。何か助けになることがあれば、事前に感謝します.
私の問題は、2 BC の統合に苦労していることです。
さまざまな解決策:
- サービス RPC (#A) は単純ですが、規模が限られています。 -
メッセージングを伴うサービス (#B) は正しいようですが、まだフィードバックが必要です。
それと国境を越える方法。
ありがとうございました!
architecture - Mulesoft (ESB) はハブ アンド スポークとどう違うのですか?
私の本来の目的は、ESB アーキテクチャとハブスポーク アーキテクチャの違いを理解することです。残念ながら、いくら答えられてもはっきりとは理解できません。
以下は私の理解です - ESB は製品ではなく、アーキテクチャ トポロジです - ESB は疎結合の統合を促進し、依存性を軽減します - Mulesoft ESB および市場に出回っている他の ESB は ESB の特性以上のものを提供します - メッセージ ルーティング/Web サービスのサポート
私が理解しようとしている点は、HUB-SPOKE アーキテクチャとはどのように異なるのでしょうか?
ESB によると、分散メッセージ配信アーキテクチャにより、依存関係が軽減され、ダウンタイムが短縮される可能性があります。しかし、どのように?「アダプター」/統合レイヤーがソースと宛先のアプリケーションにあるためですか? もしそうなら、なぜ Mulesoft や市場の ESB は膨大な範囲のアダプタを提供することを提案しているのですか?
アーキテクチャ設計の問題であれば、アプリケーション エンドにアダプタを配置し、ルーティングだけに ESB を使用できるということですか? MUlesoft が提供するアダプターを使用しないままにしますか?
さらに重要なことは、Hub との違いは何ですか? 技術的には、「HUB-SPOKE」では分散メッセージ配信アーキテクチャが許可されないと言われているのはなぜですか?
これで何か助けていただければ幸いです。前もって感謝します。
soa - DaasとEAIの違い
Daas Data as Service と EAI Enterprise Application Integration の違いは何ですか? EAI は、ESB Enterprise Service Bus を使用したエンタープライズ ソフトウェア統合 (ERP、SCM、CRM などの間) の複雑さを克服するために設計されたフレームワークであることを理解しています。EAIとSOAの違いも理解したい
architecture - レコードのシステムを別のシステムに複製する必要がありますか?
私は、顧客情報の保存、更新、および取得に使用される顧客マスター システムを持っています。サービス呼び出しは 300 ~ 600 ミリ秒程度です。明らかにそれは記録のシステムです。
顧客マスター情報を必要とする別の販促システムを設計しています。販促システムは、顧客マスター情報が必要になるたびに顧客マスター システムを呼び出す必要があるのか、それともデータベースのコピーを保持して定期的に顧客マスター システムとの同期を試みるべきなのか疑問に思っています。
jboss - 一方向 MEP と要求応答 MEP の違いは何ですか?
JBossESB Programmer's manualでは、次のように言及されています。
「JBossESB 内のクライアントとサービス間のすべての対話は、メッセージの交換を通じて発生します。疎結合を促進するために、一方向メッセージに基づくメッセージ交換パターンをお勧めします。つまり、要求と応答は独立したメッセージであり、必要に応じてインフラストラクチャまたはアプリケーションによって関連付けられます。」</p>
しかし、要求と応答が一方向 MEP の独立したメッセージである場合、要求応答 MEP の違いは何ですか?
そして、それぞれを使用することの実際の利点は何ですか?
maven - JBoss Fuse/Red Hat JBoss developer Studio、Fuse Integration Project エラー
グラフィカル Camel プロジェクトで次の POM ファイルに対して maven install または maven clean を実行すると、エラーが発生します。Red Hat JBoss Developer Studio を使用しています
私のポンフライは次のとおりです
コンソールに表示されるエラーメッセージは次のとおりです
解決できないインポート POM: https://(当社のnexus リポジトリ)/content/groups/public で org.jboss.fuse.bom:jboss-fuse-parent:pom:6.3.0.redhat-187 がキャッシュされませんでしたローカル リポジトリでは、(当社の nexus リポジトリ).com の更新間隔が経過するか、29 行目、19 列目の更新が強制されるまで、解決は再試行されません -> [ヘルプ 2] [エラー]
問題を解決するための私の長い探求を終わらせ、私の永遠の感謝を達成するために、あらゆる助けが必要です.
PS Redhat Documentation Web サイトでアドバイスされているように、必要な依存関係プロファイルをセットアップするために、Maven 構成を既に行っています。
第 2 バージョン POM は、2016 年 12 月 28 日 1500 時間 CET の推奨に基づいています。