問題タブ [enterprise-integration]

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.

0 投票する
1 に答える
1720 参照

java - CAMEL で承認を処理しますか?

Web リクエスト、http リクエスト、soap リクエスト、または他のチャネルなど、さまざまな方法でリクエストを送信するクライアントがあります。

Camel では、それぞれのエンドポイントから jms キューに受信します。キュー プロセッサからメッセージを取得します。ここで、プロセッサは、クライアントの好み (着信要求で送信したもの) に基づいて、確認をクライアントに送信する必要があります。

http://camel.apache.org/request-reply.htmlビットで実行できると思いますが、どうにかして先に進むことができません。基本的に、CAMEL の組み込み機能を使用して、プロセッサからそれぞれのクライアントへの確認応答を処理する方法がわかりません。どんな方向でも助けになりますか?

更新:-クライアントの設定は、クライアントからの着信要求メッセージに格納されます。システムのどこかに保存されていると想定することもできます(dbまたはプロパティファイル)

0 投票する
1 に答える
83 参照

java - ファイル要求への応答を送信しますか?

私のクライアントの1人は、CAMELで以下の構成を使用して、ディレクトリのプレースオーダーの下にファイルリクエストを置きました

incomingOrders からの処理が完了したら、ファイル要求を開始した顧客に何らかの応答を送信したいと考えています。どうすればCAMELでそれを達成できますか(おそらくリクエストの返信またはリターンアドレスパターンを使用して)。何か案は?

0 投票する
3 に答える
4409 参照

rest - ハブ、スポーク、ESB の違い

これについてはすでに良い質問があることは知っていますが、私が探しているものには実際には答えていません。

私が理解していることから:

1. どちらもアプリケーション間の中心的な焦点として使用されます
2. どちらもサービス/アプリ間のルーティング/仲介/変換などを使用できます

しかし、私が実際に見ることができる唯一の違いは、ハブとスポークには通常、ハブに入る多くの異なる形式 (SOAP/REST/XML/JSON...) があるのに対し、ESB には通常標準形式 (通常は SOAP のみ) があることです。

また、ハブ アンド スポークは ESB と比較して単一障害点をもたらすことも読み続けています。では、ここでの違いは物理的な展開ですか? ハブには可能なすべてのエンドポイントがあり、ESB には複数のハブに展開されたエンドポイントがあるのでしょうか? では、ESB は複数のハブに過ぎないのでしょうか (より適切な言葉が必要なため)。

誰でも私のためにこれを片付けるのを助けることができますか?

0 投票する
1 に答える
2208 参照

sql - Apache Camel のべき等消費者パターンはスケーラブルですか?

Apache Camel 2.13.1 を使用して、30 万行を超えるデータベース テーブルをポーリングしています。Idempotent Consumer EIPを使用して、既に処理された行をフィルタリングしようとしています。

ただし、実装が本当にスケーラブルかどうかは疑問です。私のラクダのコンテキストは次のとおりです:-

完全な 30 万行が 10 秒ごとに (consumer.delay パラメーターを介して) 処理されるように見えますが、これは非常に非効率的です。フィルターにフィードするクエリが既に処理された行のセットを利用できるように、パターンの一部としてある種のフィードバック ループを期待します。

ただし、CAMEL_MESSAGEPROCESSED テーブルの messageid 列には次のパターンがあります。

ここで、1908988 は request.body.ID です。EIP をキーオンに設定したため、クエリに簡単に組み込むことができません。

CAMEL_MESSAGEPROCESSED テーブルを select ステートメントへのフィードバック ループとして使用して、SQL サーバーがほとんどの負荷を実行するためのより良い方法はありますか?

アップデート:

そのため、奇妙なメッセージID列の値を引き起こしているのは私のognlコードであることがわかりました。それをに変更する

修正しました。これで、使用可能な messageId 列ができたので、'from' SQL クエリを

しかし、Idempotent Consumer EIP を破損していると思います。

他の誰かがこれをしますか?しない理由はありますか?

0 投票する
0 に答える
114 参照

java - OnRedelivery 状態のクリーンアップ

したがって、Camel Error Handler で再配信時に呼び出すことができる 2 つのクラスがあります。2 つを 1 つProcessorsにまとめたので、1 つを としてProcessor設定できます。ProcessoronRedeliveryHandler

私の質問はonRedeliveryHandler、ルートが正常に終了したらクリーンアップする必要がある状態を設定する場合、これを行う良い方法は何ですか?

私のルートは複雑で、メッセージが成功した場合にはさまざまなルートが存在する可能性があります。cleanup現在、これらの各ルートで、ハンドラーに成功を知らせるルートを呼び出すようにしています。これは機能しますが、これには2つの問題があるため、より良い方法があるようです。

まず、再配信が入らなかった場合、onRedelivery 状態をクリーンアップする必要はありません。

次に、各成功エンドポイント ルートからクリーンアップ ルートへの呼び出しを手動で追加する必要があります。

これを行うためのより良い/より標準的な方法はありますか?

0 投票する
1 に答える
1190 参照

java - キャメルでの配達保証

ActiveMQ で Apache Camel を使用しており、保証されたメッセージ配信を実装したいと考えています。

Camel in Action 本と Apache Camel Developer's Cookbook を読んでいます。

ここの誰かが私のアプローチについてアドバイスしてくれることを願っています。コードサンプルを求めているわけではありません。

私が思い描いた実装方法は次のとおりです。

簡単に聞こえます。ただし、キャメルの「デッドレターチャネル」パターンについて読んでいます。

このパターンの実装を使用するという私の理解は、各 (保証された) メッセージを「GuaranteedMessages」キューに自動的にドロップする代わりに、そのアプローチをドロップし、代わりに再配信オプション (最大試行回数、指数関数的遅延、再配信遅延など) を設定することを意味します。 . 次に、Camel に頼って再配信を試み、それが通過しない場合はデッド レター チャネルの遅​​延にドロップします。

次に、この配信不能キューをソースとして使用する別のルートを作成します。繰り返しますが、同じパターンになります。成功しない場合は、メッセージを配信不能キューに送り返します。

これは本番システムの現実的な実装のように思えますか?

代わりに、すべての受信メッセージ (保証する必要がある) を自分の "GuaranteeMessage" キューにドロップすることにした場合、後でその特定のメッセージをキューから手動で削除できると信じるのは現実的ですか? 私の理解では、キューを手動で参照し、任意の数のメッセージを繰り返し処理し、そのメッセージを手動で消費する必要があります。そのようなアーキテクチャが実際にどれほどスケーラブルかはわかりません。

0 投票する
1 に答える
206 参照

java - 2 つのアプリケーション間のスケーラブルな統合のためのエンタープライズ統合パターンはどれですか?

2 つのアプリケーションがあります。1 つは消費者が製品を閲覧して購入できるように公開されています。製品はオンライン コースであり、顧客の注文に応じて、ログインしてそのコースを使用できる他のアプリケーションのログイン資格情報を取得するためのアカウントを取得します。

現代では、消費者が注文アプリケーションを出すと、SOAP を別のアプリケーション Web サービスに送信します。別のアプリケーション Web サービスは、顧客に必要な資格情報を作成し、それに応答して、注文が「正常に処理された」ことを他のアプリケーションに伝え、レシートが常にリンクがある場所に印刷されます。シームレスに他のシステムにログインできます。

この統合にはいくつかの問題があります。

  1. Web サービスを介して注文を受け取る他のシステムのメンテナンスを行い、すべての販売が停止するまで資格情報を作成すると、
  2. フォールト トレランスなし - 断続的なネットワークの問題により、両方のシステムが通信できないか、Web サービスがデータベース サーバーと通信できないために、すべてのシステム ノードまたは一部のシステム ノードが使用できなくなったと想定し、注文を開始して失敗したとします。
  3. トランザクション管理を改善する必要がある
  4. 例外管理を改善する必要がある

そして、改善欲求:

  1. オーダー Web サービスを備えたポータルのメンテナンス期間はオーダーに影響しません。代わりに、注文はキューに入れられ、ポータルがライブに戻ると、キューに入れられたすべての注文の処理が開始されました
  2. 顧客の認証情報を作成する (ポータル) Web サービスの注文トランザクションは、明確に定義されたトランザクション (設計) パターンに基づいて構築する必要があります。
  3. 2 つのシステム間の通信を改善する優れた例外処理

最後に、両方のシステム統合が改善され、注文の失敗という最も重要な問題が完全に解決されます。

私は EIP や Messaging Services、Service Oriented Architecture についてあまり詳しくありません。コンセプトを構築し、問題に対処するためのソリューションを準備する時間もあまりありません。これらすべてのトピックを読み始めましたが、この問題に対処し、この統合をよりスケーラブルで信頼できるものにするためのアーキテクチャ上の解決策を言うには、迅速な支援が必要です。

ありがとう。

0 投票する
1 に答える
915 参照

spring - 受信ファイル アダプター + クラスター化された環境

クラスター内の 2 つのノードにデプロイされたスプリング統合アプリがあります。単一のディレクトリ (インバウンド ファイル アダプター) で着信ファイルをポーリングします。ファイルがノードによって取得されて処理される場合、他のノードが同じファイルを取得しようとして、以下の例外をスローすることがあります。

エラー org.springframework.integration.handler.LoggingHandler - org.springframework.integration.MessageHandlingException: ファイルへのメッセージ ペイロードの書き込みに失敗しました ..... 原因: java.io.FileNotFoundException: /somedir/dir/file.txt (Noそのようなファイルまたはディレクトリ)

ポーリング/クラスタリングなどはどこでも議論されていることを私は知っています。これに関する正確な説明はどこでも見つかりました。私はこれを片付けて、ログをよりきれいに保とうとしています。よろしくお願いします。これを防ぐために、インバウンドファイルアダプターに簡単な構成はありますか?

0 投票する
1 に答える
193 参照

java - メッセージ処理パターンに適した Camel DSL はどれですか?

メッセージ ブローカーにメッセージを送信するアプリケーションが必要な状況があります。ブローカをリッスンしている別のクライアントは、キューからメッセージを消費し、メッセージのタイプを判断して、メッセージを適切なハンドラに渡す必要があります。

たとえば、FizzPOJO が JSON としてシリアル化されてからブローカーに送信される場合、他のプロセスはそれを消費し、JSON からインスタンスに逆シリアル化してから、プロセッサFizzに渡すことを認識している必要があります。メッセージについても同様です。デシリアライズして に戻し、などに送信する必要があります。FizzFizzHandlerBuzzBuzzBuzzHandler

ルートの擬似コードは次のようになるはずです。

私は動的ルーターがこの問題に適したプロセッサであると信じていますが、EIP の専門家ではないので、私の要素から外れている可能性があります

ここでの 2 つの大きな問題:

  • Camel-GSON は、あるタイプの JSON がFizzオブジェクトを表し、JSON の別の文字列がオブジェクトを表していることをどうやって知ることができるBuzzでしょうか?
  • 逆シリアル化されたメッセージを正しいハンドラにルーティングするには、どの EIP/Camel DSL/プロセッサを使用する必要がありますか?
0 投票する
1 に答える
106 参照

apache-camel - Apache Camel で変更ログを実際の状態に変換する

私は 2 つのシステムを持っており、それらを A と B と呼んでいます。A で重要なオブジェクトが変更されると、A はそれを Apache Camel を介して B に送信します。ただし、A が実際にオブジェクトの変更ログを持っているのに対し、B はオブジェクトの実際の状態のみを反映する必要があるという 1 つのケースに遭遇しました。さらに、A の変更ログには「将来の」レコードを含めることができます。これは、オブジェクトの状態の変更が将来のある時点でスケジュールされていることを意味します。システム A のユーザーは、この変更ログを編集し、変更レコードを削除し、任意のタイムスタンプ (過去および未来) を持つ新しい変更レコードを追加し、既存の変更を更新することさえできます。もちろん、A はこれらの変更レコードを B に送信しますが、B はオブジェクトの実際の状態のみを必要とします。

A からオブジェクトを照会することはできますが、A はパフォーマンスが重要なシステムであるため、追加の負荷が発生する可能性があるため、何かを照会するつもりはないことに注意してください。また、A からデータをクエリするための API は複雑すぎるため、可能な限り避けたいと考えています。

ここには 2 つの問題があります。まず、変更ログ レコードの特定の変更が実際の状態の変更を引き起こす可能性があるかどうかを認識することです。変更ログを中間データベースに保存します。変更ログ レコードが来ると、中間データベースで追加/削除/更新し、オブジェクトの実際の状態を計算して、この状態を B に送信します。

2 つ目は、変更スケジュールの追跡です。定期的なジョブを一定の間隔 (たとえば 15 分) で実行する以外に、私は何も発明できませんでした。このジョブは、最後の呼び出しから現在の呼び出しまでの時間間隔に含まれるすべてのレコードをスキャンします。

私が Apache Camel を気に入っているのは、そのコンポーネントベースのアプローチです。エンドポイントを接続してすべての作業を行うだけでよく、わずかなコーディングしか必要ありません。Apache Camel と EIP の両方で、この問題に対する既存のプリミティブはありますか?