問題タブ [saga]

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 に答える
131 参照

soa - ドキュメント処理 - サガのケース?

私が取り組んでいるアプリケーションの一部には、添付ファイルを含む電子メールのダウンロード、各添付ファイルのバーコードの検出、識別子のスキャン、識別子を使用したデータベースへのデータの挿入が含まれます。

これまでのところ、メッセージ バスの使用は Pub/Sub に限定されており、実際に Sagas を使用する必要はありませんでした。ただし、上記の各ステップが同じ関連プロセスの一部であり、プロセスの一部が失敗した場合の耐久性が必要な場合、Saga は適切でしょうか?

私たちのプロセスの詳細と、佐賀をどのように使用できると私が考えたかは次のとおりです。

  1. Quartz ジョブは、PDF 添付ファイルを含む電子メールをダウンロードするために使用されます。Quartz ジョブは、Connectorに​​関する情報を含むを使用しTenantます。このテナント情報は、Saga がテナント固有のリソース (データベース/ストレージ) と対話できるようにするために必要になります。
  2. PDF 添付ファイルごとに、"Process Document" Saga を開始して、テナント情報とドキュメント自体 (メッセージ バスがこれを永続化できると仮定) またはディスク上のファイルのパスを渡します。ソース電子メールの添付ファイルごとに Saga が開始された後、コネクタはメールボックスから電子メールを削除/アーカイブして、再度処理されないようにすることができます。

その後、各 Saga は次のタスクを実行します。

  1. 添付ファイル/ファイルからバーコードを読み取ろうとします。バーコードの検出に失敗した場合は、手動で処理できるように、指定された場所にファイルをアップロードする必要があります。これで佐賀が完成します。バーコード検出された場合、データベース識別子をデコードします。
  2. Order識別子を使用して、関連するレコードをデータベースから ロードし、存在する場合:
    1. URI を返す指定された場所にファイルをアップロードします
    2. OrderDocumentファイル URI を参照する新しいレコードをデータベースに挿入します。
  3. OrderDocumentBundle注文にリンクされたすべてのドキュメントを含む単一のファイルであるを更新します。そのため、 newが作成されたら、関連するOrderDocumentをロードし、 new からページを追加する必要があります。OrderDocumentBundleOrderOrderDocument
  4. 佐賀が完成。

バンドルを更新しようとする複数のメッセージが表示される可能性があるため、最終的なバンドル プロセス中の同時実行の問題が懸念されます。バンドル ファイルが使用可能になるまで Saga が待機するようにして、Saga が完了するようにする必要があります。

0 投票する
2 に答える
266 参照

r - エラー: モジュール RSAGA を見つけることができます

RSAGA でチャネル ネットワークのモジュールを実行しようとしていますが、コードのこの部分を実行すると:

次のエラーが表示されます。

エラー: モジュールが見つかりませんでした: shape_grid

これを解決する方法はありますか。ありがとう!

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

c# - Nservice バス サガの実装

私はコネクタと呼ぶnserviceバスプロジェクトを持っています。私のコネクタは、ClientChangeMes​​sage、ClientContactChangeMes​​sage など、さまざまな種類のメッセージを受け取ります。私のコネクタはサガを実装していないので、各メッセージのハンドラがあるので、ClientChangeMes​​sage には、コネクタが ClientChangeMes​​sage を受信したときに起動される ClientChangeMes​​sageHandler と、ClientContactChangeMes​​sage を受信したときに ClientContactChangeMes​​sageHandler があります。

サガの実装を見ていると、次のコードを書いていることに気付きました (クライアントの連絡先メッセージが ClientChange メッセージの前に来る場合、つまりクライアントがデータベースに存在しない場合)。

例からわかるように、CLientChangeMes​​sage のハンドルも実装する必要があります。ClientChangeMes​​sage のハンドラーは既に定義されています。さらに時間内に ClientChangeMes​​sage が来る場合は、ここでもう一度ハンドラーを処理する必要がありますか?私はそれがこれではなく ClientChangeMes​​sageHandler nad によってキャッチされ、処理されることを期待しています。

データベースにクライアントのローカル参照が見つからない場合にのみ、メッセージを保存したいと思います。ウェブ上のサガの例を見ると、これが処理される特定の場所や条件は見当たりません。ClientContactChange ハンドル メソッド内にメッセージを保存することを望んでいます。

どんな助けでも大歓迎です、

ありがとう

アップデート:

NService Bus Saga の実装方法がよくわからなかったようです。私がここで犯した間違いは、クライアント連絡先の変更を単一のエンティティ、つまりクライアント変更メッセージとは無関係であると見なしたことです。したがって、クライアントの連絡先を変更するためだけに Saga を実装するのは間違っていると思います。コードを変更する方法は次のとおりです。

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

asp.net - MassTransit RuntimeServices RabbitMQ - NuGet MassTransit インストールと統合しますか?

メッセージング バスに MassTransit と RabbitMQ を使用する ASP.NET プロジェクトがあり、MassTransit Sagas を実装しようとしています。MassTransit.RuntimeServices (TimeoutService) を必要とする Saga の ScheduleTimeout 機能を使用したいと考えています。

しかし、私が学んだように、MassTransit の NuGet インストールには RuntimeServices が含まれていません。

そのため、MassTransit.RuntimeServices と MassTransit.RuntimeServices.Database を取り出してプロジェクトに直接含めようとしましたが、解決または復元されない参照や、rabbitmq の代わりに msmq が広く使用されているなど、多くのエラーが発生しました。ランタイム サービス。

一緒にハッキングして参照エラーを停止し、msmq を rabbitmq 参照に置き換えようとした後、アプリは実行時に例外をスローし、アプリケーションを完全に壊してしまい、RuntimeServices プロジェクトをアンロードしてサーバーを再起動する必要がありました。

MSMQ の代わりに Rabbit MQ を使用する、MassTransit の NuGet インストール バージョンに RuntimeServices を統合する方法を知っている人はいますか?

ありがとうございました

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

nservicebus - saga finder を実行するにはどうすればよいですか?

次のような sager finder があり、Findby メソッドの最初の行にブレーク ポイントを配置しましたが、決して実行されないようです。私がしなければならないことは他にありますか?

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

nservicebus - NServiceBus saga から saga への通信はアンチパターンですか?

どちらも無限に実行され、タイムアウトに応答する 2 つの長時間実行サガがあります。1 つ目は 15 分ごとのタイムアウトにサブスクライブし、2 つ目は 24 時間ごとにサブスクライブします。各サガは自身の実行時間を追跡し、実行の開始時と完了時に他のサガに通知します。これらのサガが担当するバルク データ ロードは、データベースの競合のため同時に実行できません。

最初のサガ ( Saga A~15 分) が開始されると、最初に (内部変数を使用して) 2 番目のサガ ( Saga B~24 時間) が現在実行されているかどうかがチェックされます。そうでない場合は、処理手順を開始します (別のプロセスにシェルを実行し、時間をかけてポーリングして、いつ完了したかを確認します)。これら 2 つのサガは、開始時または完了時にメッセージを送信して相互に通信します。

何らかの理由で、これは2つのレベルで私には臭いようです:

  1. 基本的に、決して完成しないシングルトン サガがあります。これはそれ自体がアンチパターンですか?
  2. 状態を変更することのみを目的として、メッセージを双方向に送信しています。この種のシナリオを処理するためのより良い方法があるはずです。sendingNSB 4.0 のリリースに伴い、コマンド実行時にエラーが発生するようになりました。代わりに pub-sub アプローチを使用すると、エラーは解消されました。

これは NServiceBus 実装のアンチパターンと見なされますか? また、この種の要件に適したパターンはありますか?

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

nservicebus - List に関する NHibernate での NServiceBus SagaData の永続性の問題

リストが原因で、この sagadata とそれも保存しようとするとエラーが発生します。このリストを削除するとすぐに、データを保存できます。