問題タブ [nservicebus-sagas]

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

.net - Saga データへの複合型の追加

複合型を含む SagaData で Saga を作成しようとしています。

例えば:

これは可能ですか?もしそうなら、これをどのようにマッピングしますか?これはアンチパターンですか? これを行うことについて話しているリソースをオンラインで見つけていないため、何かが欠けていると思います。

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

testing - NServiceBus Saga 単体テストの依存性注入

私の質問は、テスト用の NserviceBus Handler の DI ( Handler ) に関する質問に似ています。解決策として、次の構文を使用してコンストラクター インジェクションを使用できます。

Saga のテストに同じアプローチを使用する方法が見つかりませんでした。次のようなプロパティ注入のサポートがあります。

ただし、このアプローチでは、依存関係をパブリック プロパティにする必要があります。そして、それを避けたいと思っています。

Saga テストに構築依存性注入を使用する方法はありますか?

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

nservicebus - nservicebus を使用して実行時間の長いプロセスを処理するにはどうすればよいですか

これは多くの人にとって非常に明白なことですが、私のクライアントは、私があまり便利ではないパターンを使用しています。

たとえば、顧客が nservicebus を介してサード パーティ システムに送信される預金または引き出しを送信する場合です。サードパーティのシステムがそのトランザクションを処理する必要がありますが、トランザクションが完了するまでに数日、場合によっては数週間かかる場合があります。

今日の解決策は、トランザクションを第三者システムに渡すためのメッセージを最初に送信する saga を作成することです。完了したら、サガの次のステップは、完了の更新を確認することです。トランザクションが完了していない場合は、'待機のように' requesttimeout が送信されます。タイムアウトに達すると、同じチェックがもう一度実行され、新しい requesttimeout が送信されます...など。これ永遠のループでした。他に行うことは、ServiceInsight を同じ SagaTimeout で何度も完全に満たすことです。

私は一眼レフを調べてきましたが、手短に出てくるようです。すべてのメッセージではなく、特定のメッセージに対してのみ多くの再試行が必要です。

さらに、サードパーティのシステムはトランザクションが完了したというイベントを送信できないため、完了の更新をポーリングする必要があります。

もう1つ、より良い解決策は、トランザクションのステータスを保存し、トランザクションをサードパーティに送信して、この特定の物語を終わらせることです. 次に、時間間隔を使用して完了の更新をチェックするサガを作成します。

このように sagatimeouts を使用するのは一般的なパターンですか? そして、サガ/ハンドラーが完了の更新のみをチェックすることはより良い解決策ですか?

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

c# - NServiceBus saga データが作成されない

NServiceBus の不思議な世界で私のサガ データが作成されない理由について、誰かが何らかの洞察を提供できるかどうか疑問に思っていました。

NBus に付属するすべての構成と XML 地獄 (デフォルト) の背後で、自分のサガ データを機能させることができないようです。SQLにアクセスでき、テーブル、sprocなどを作成できるWindows資格情報を使用して、デバッグモードでエンドポイントを実行していますが、何らかの理由でテーブルが作成されていません.

構成をコピーして貼り付けることができますが、これは広範囲にわたるものですが、この投稿に役立つと思われるものを提供しますが、さらに情報が必要な場合は、お知らせください。

これを機能させるには、どの追加の魔法を組み込む必要があるのか​​ 疑問に思っていると思いますか?

乾杯、DS。

活躍中の佐賀..

編集 現在使用されているバージョンを追加します。

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

multithreading - NServiceBus ハンドラーは常に迅速に完了する必要がありますか?

[わかりやすくするために編集]

正しく理解しているかどうかわかりません。

これらの有益な投稿によると、佐賀の内部ではすべてが簡潔かつ迅速でなければなりません。

  • ジョナサン・オリバーのまとめ: blog.jonathanoliver.com/…
  • ウディ・ダハンのオリジナル:skillsmatter.com/skillscasts/…
  • そしていくつかの以前の投稿
  • lostechies.com/jimmybogard/2013/03/26/scaling-nservicebus-sagas
  • docs.particular.net/nservicebus/アーキテクチャ/原則

つまり、サガにはビジネス ロジックがなく、内部に if-else 命令があってはなりません。それは単なるオーケストレーターであるべきであり、それを呼び出すことは「成功志向」であるように計画する必要があります。つまり、Saga を呼び出す前に、可能な限り多くの検証を行う必要があります。

しかし、個別のハンドラー (「独立したハンドラー」と呼んでいますか?)、つまり、サガ内にないハンドラーについてはどうでしょうか? 次のうち、正しいものはどれですか。

を。サガ外の NServiceBus メッセージ ハンドラーは常に迅速に完了し、時間のかかるアクションがある場合はそれをスレッドに渡して完了する必要がありますか?

b. または、ハンドラーを「独り占め」したほうがよいのでしょうか。そうすれば、NServiceBus はこのメッセージが高い料金で使用されていることを「認識」し、それに応じてアクションを実行できます。つまり、自動負荷分散を使用して、処理プロセスの別のインスタンスを作成します別のプロセスまたは別のマシンですか?

正しい方法は何ですか?

また、メソッドを呼び出して、回答とともにサンプル コードを提供できますかFoo.DoTimeConsumingBar()

ありがとうございました。

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

nservicebus - NServiceBus - 同じキーでサガをキューに入れる

シナリオ: 10 ステップのサガを作成しました。さまざまなシステムを更新しており、サガ全体が完了するまでに数分かかる場合があります.

物語は、ユーザーが顧客に関する情報を入力する別のシステムからのデータから始まります。

ユーザーがシステムにデータを入力し終わったときはわかりませんが、x 分ごとに変更されたデータをシステムから読み取っています。

私の問題は、顧客に関するデータを使用してサガを開始するたびに、同じ顧客に関する以前のサガが終了していることを確認する必要があることです。ユーザーがデータの入力に 10 分を費やしている場合、システムは同じ顧客に対して 5 つのフローを開始し、フローが前のフローを追い越してデータを台無しにする可能性があります。

これを解決する方法を知っている人はいますか?

前もって感謝します。

オーレ

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

rabbitmq - RabbitMQ+RavenDB を使用したプロトタイプ プロジェクトで、RabbitMQ からの SharedQueue クローズ エラーが繰り返される

私は、RabbitMQ をトランスポートとして使用し、RavenDB を永続化メカニズムとして使用して、単純な saga プロトタイプ プロジェクトを作成しました。プロトタイプは実際には期待どおりに実行されますが、数秒ごとに次のエラー メッセージが表示されます。

エラー NServiceBus.Transports.RabbitMQ.RabbitMqDequeueStrategy [Assembly] からメッセージを受信できませんでした。再試行 System.AggregateException: 1 つ以上のエラーが発生しました。--> System.IO.EndOfStreamException: RabbitMQ.Util.SharedQueue 1.EnsureIsOpen() at RabbitMQ.Util.SharedQueue1.Dequeue(int 32 ミリ秒のタイムアウトで SharedQueue が閉じられました......

また、上記のメッセージの直後にほぼ同じメッセージが表示されますが、RabbitMGPoller.Timeouts からメッセージを受信できませんでしたと表示されます

それに加えて、次のような一定の INFO メッセージがあります: NServiceBus.Transports.RabbitMQ.RabbitMqConnectionManager RabbitMQ ブローカーから切断されました。 .IOException: トランスポート接続にデータを書き込めません: 既存の接続がリモート ホストによって強制的に閉じられました。---> System.Net.Sockets.SocketException: 既存の接続がリモート ホストによって強制的に閉じられました...

DequeueTimeout=600 値をトランスポート接続に追加しようとしましたが、同じエラーが引き続き発生します。また、構成ファイルに次のキーを追加しようとしましたが、それでも役に立たないようです。

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

unit-testing - NServiceBus サガが発信者に応答しないことを確認する

サガが発信者に返信していないことをテストする最良の方法は何ですか?

NServiceBus.Testing を使用して Saga.ExpectReplyToOriginator を呼び出すことができますが、「ExpectNotReplyToOriginator」のようなものは表示されません。.ExpectNotSend() と .ExpectNotPublish() を使用してみましたが、どちらも期待どおりに失敗しないようです。

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

nservicebus - サガルックアップの最適化

並列スレッドでリモートの場所からファイルをダウンロードするプロセスがあります。各スレッドは、ダウンロードの開始時にメッセージを送信し、ダウンロードの完了時に 2 つ目のメッセージを送信します。両方のメッセージには、2 つを関連付けるためのダウンロード ID プロパティ (guid) があります。

次に、これらのダウンロードを監視するサガがあります。これは DownloadStarted イベントによって開始され、タイムアウトを使用して DownloadEnded イベントが時間内に受信されたかどうかを検出します。

私が抱えている問題は、大量のファイルが短時間 (1 分間で 1000 ファイル) にダウンロードされると、サガのパフォーマンスがそれほど大きくないことです。場合によっては、追いつくのに 30 分以上かかることもあります。

IFindSagas 実装を提供することで、サガ検索を高速化しようとしました。これは、RavenDB がサガ データの DownloadId に自動インデックスを作成する原因となったため、あまり役に立ちませんでしたが、そのインデックスが時間内に更新されなかったため、FindBy メソッドがしばしば null を返す原因にもなりました。

サガをスピードアップしようとする他の方法はありますか? DownloadId は既に一意の GUID であるため、サガ ID として使用することを考えていました。サガ データの Id プロパティは設定可能ですが、ドキュメントには ID を自分で設定しないように明記されています...

使用されるトランスポート: MSMQ 使用される持続性: RavenDB NServiceBus バージョン: 5