問題タブ [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.
c# - サガの完了により、分散トランザクション完了エラーが発生する
処理順序:
- Saga メッセージ ハンドラは、データ項目を含む最初のメッセージを受け取ります。
- メッセージ ハンドラーは、独自のデータベース トランザクションを持つビジネス オブジェクトを使用します。
- アイテムが正常に更新されると、データベース トランザクションがコミットされ、saga が完了します。
- Saga メッセージ ハンドラは、データ項目を含む 2 番目のメッセージを受け取ります。
- メッセージ ハンドラーは、上記のように新しいデータベース トランザクションを開こうとして例外をスローします。
エラーメッセージ:
スタックトレース:
上記のフローをカバーするコードはかなりたくさんありますが、役立つものを投稿できてうれしいです。
instance - Nservicebus SagaData インスタンス?
MSMQ にメッセージを追加するために Nservicebus sagadata を使用していますが、これは初めてです。サガ データを持つアクティブなサガがあるかどうかを確認する必要がある状況があります。存在する場合は、SagaData に格納されているオブジェクト ID を読み取ります。SagaData が作成されていることを確認する方法はありますか? StuctureMap.ObjectFactory.Container は役に立ちますか?
事前にありがとうハリス
handler - NServiceBus Saga でエラー キューのハンドラを作成する方法は?
MSMQ の Maxtries が 5 である状況があります。5 回後、nservicebus は定義したエラー キューにメッセージを送信します。これが発生したときに、さらにアクションを実行したいと思います (いくつかのプロセスのステータスをエラーに更新する必要があります)。これらのエラー キューを読み取るために、Saga クラスにハンドラーを記述できますか?
よろしくお願いします ハリス
events - Nservicebus Sagas とイベントのサブスクライブ
NServiceBus 3.0.3 で、私はサガを書きました。私が CQRS パラダイムで見ているものに基づいて、過去時制を見ると、それはイベントと一致するはずです。サガにビジネス ロジックがないことを確認したい。サガを構築する際の私の仮定は、イベントを受信し、受信したイベントとサガに保存されている特定のデータ要素に基づいてコマンドを発行するというものです。私が直面している問題は、Saga がデフォルトで公開されたイベントをサブスクライブできないことです。EndPointConfig で IWantToRunAtStartup を設定し、Run メソッドを実行してみました
サガと同じアセンブリでハンドラーを作成しようとしましたが、サイコロはまだありません。
サガ (Nservicebus.host.exe によってホストされる) とパブリッシャー (コンソール アプリケーションのサービス) の両方の app.config には、メッセージ エンドポイントがそのように構成されています。
Saga で IHandleMessages が構成され、orderid でマッピングが構成されています。
なぜ佐賀にこのイベントをサブスクライブしてもらえないのか、少し迷っています。デフォルトでは自動サブスクライブしないことは理解していますが、Udi と John のブログのサンプルを見ると、過去時制がサガに送信され (IEvent?)、コマンド (ICommand) であると推測される Bus.Send が発行されていることがわかります。
nhibernate - IDictionary をマップする方法Fluent NHibernate のクラス マッピングを使用して、そのマッピングをテストしますか?
MassTransit saga には、正しくマップされないフィールドが 1 つしかありません。それは -
私はそれをいくつかの方法でマッピングしようとしました -
そして、マッピングをテストするための単体テストを作成しました-
マッピングやテストのどこに問題があるのか、私にはわかりません。単体テストの実際のエラーは -
IDictionary を ClassMap にマップし、そのマッピングを PersistenceSpecification...VerifyMappings() でテストする方法を誰かが説明できますか?
PS - FluentNHibernate のバージョンは 1.3.0.717 で、NHibernate のバージョンは 3.2.0.4000 です。マイナーで無関係な変更のために、ローカルでコンパイルする必要がありました。
ありがとうございました!
ここに私が今得ている残りのエラーがあります -
nhibernate - NHibernate 永続 IList に項目を追加する MassTransit Saga で良好なパフォーマンスを確保する方法
私は3つの状態を持つサガを持っています -
BofMessage (Bof = ファイルの先頭) を取得すると、Initial から RecomingRows に遷移します。BofMessage の後、多数の RowMessage を受け取ります。それぞれがフラット ファイル内の行を記述しています。すべての RowMessage が送信されると、EofMessage が送信され、状態が Completed に変わります。観察 -
これは、パフォーマンスが n の 2 乗であることを除けば機能します。NHProf で調査すると、各行が追加されると、行のリスト全体が次のようになることがわかります。
A) データベースから選択
B) データベースから削除
C) データベースに再挿入されます。
これは私には非常に悪い行動のようです。行を追加するために必要なことは、データベースに単一の行を追加することだけです! 追加操作は、文字通り、行リストで行っている唯一のことです。リストに 10,000 個のアイテムがある場合、これはスケーリングしません。
このサガをより健全なパフォーマンス動作にする方法を知っている人はいますか?
ところで-必要に応じてIListをマップする方法は次のとおりです-
ありがとうございました!
cqrs - 佐賀、コマンド、イベント、ReadModel
私は現在、最初の物語を書いていますが、読み取りモデルに少し戸惑っています。例を挙げて説明しましょう:
私には、プログラミング、請負業者、制御という3つの境界のあるコンテキストがあります。それぞれに固有の読み取りモデルがあります。
worflow:
- プログラミングはイベント「JobScheduled」を送信します
- 佐賀はこのイベントを受け取り、請負業者に「作業をスケジュールする」ように指示します。
- 完了したら、請負業者はイベント「JobDone」を送信します。
- 佐賀はこのイベントを受け取り、コントロールに「コントロール期間の開始」を指示します。
ここではすべてがうまくいくことがわかります。私たちは書き込み側にいるので、プロセスを進めるための重要な情報を渡します。
私の質問には不要な情報が含まれています。イベント「JobScheduled」にメモフィールド「テストノート」があり、このジョブが実行される前に、このフィールドが「テストノート重要」に変更されたとします。この変更は、説明されているワークフローにとって重要ではありませんが、請負業者が制限されたコンテキストの読み取りモデルを見るときに、請負業者が現場で変更を確認できることが重要です。
佐賀にイベントNoteChangedを与えて処理するのですか、それとも請負業者の境界のコンテキストでこのイベントを直接リッスンするプロジェクションを作成する必要がありますか?
ここではreadmodelを更新しているだけなので、サガに渡すのは不要な作業のように見えます。変更に関係するドメインはありません。
一方、2つの境界のあるコンテキストを直接結合すると、ワークフロー内で境界のあるコンテキストが相互に持つ相互作用を変更できる可能性のあるsagasのアセットの1つが削除されます。
読んでくれてありがとう、
workflow - ワークフローとサガの違い
ワークフローとサガの違いは何ですか? それぞれの長所と短所は何ですか?
ありがとう!
nservicebus - 1 つのメッセージの複数のサガ マッピング
1 つのメッセージを複数のサガ インスタンスにマップする必要があります。どうすればできますか?
私は、そのメッセージを受信し、そのコピーをすべてのサガ インスタンスに送信するユーティリティ サービスを考えました。ただし、このソリューションには、すべての sagaId のこのサービスからの知識が必要です。
javascript - gradleから任意のメソッドを呼び出す方法は?
Gradle から Javascript コード カバレッジを佐賀県に発信しようとしていました。長い間遊んだ後、ついにそれを機能させることができました。ただし、私はgradleを初めて使用するので、自分のやり方が最も理にかなっているのかどうかわかりません! これを行うにはかなりの方法があるように思われるので、この方法で問題ないか、より良い方法があるかどうかを知ることができることを期待して、ここで行ったことを投稿すると思いました。
Maven Central から saga-core をダウンロードした後、Java の「メイン」がないことが判明しました。そのため、JavaExec を簡単に使用できるとは思いませんでした。Java オブジェクトを作成し、いくつかのパラメーターを設定し、提供された「実行」メソッドを呼び出す必要があるように見えました。
最終的なbuild.gradleは次のとおりです。