問題タブ [nservicebus3]

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 投票する
2 に答える
222 参照

nservicebus - NServiceBus Unit Of Work - 呼び出されるハンドラを取得しますか?

各メッセージ ハンドラーの前後に呼び出される NServiceBus の作業単位を作成して、そのハンドラーが実行されてデータベースに書き込まれるまでの時間を測定しようとしています。

Unit Of Work を正常に作成できましたが、Begin() メソッドの実装で、どのハンドラーが呼び出されているかをどのように確認できますか?

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

c# - 異なるスレッドで実行される NServiceBus と NHibernate EventListeners

私が達成しようとしているのは、私のWebサイトがメッセージを生成してバスに載せ、サービスがそれを受け取り、行のAddedBy/UpdatedByフィールドに自動的にデータを入力する監査でデータベースに書き込むことです.

これを行うには、ASP.Net アプリケーションにログインしているユーザーからの Thread.CurrentPrincipal からのメッセージ ヘッダーにユーザー ID を書き込む NServiceBus IMessageMutator コンポーネントを使用します。私のサービスでは、IMessageModule を使用してこのヘッダーを抽出し、これを Thread.CurrentPrincipal にバインドします。これはうまく機能し、メッセージ ハンドラー中に、Thread.CurrentPrincipal.Identity.Name が、Web アプリケーションでメッセージを生成したユーザー ID に正しくバインドされていることがわかります。

NHibernate の IPreUpdateEventListener/IPreInsertEventListener を利用して、DB に書き込まれる前に各エンティティの AddedBy/UpdatedBy を設定しています。これは Web サイトでは完全に機能しますが、私の NServiceBus サービスでは、リスナーが実行されるスレッドは、ハンドラーが実行されるスレッドとは異なります。つまり、スレッドの CurrentPrincipal は、IMessageModule でバインドされた ID ではなくなりました。

NHibernate がコール スタックで DistributedTransactionFactory を使用していることがわかります。これが問題の原因であると思われます。コミットが失敗した場合、メッセージが再試行されたり、エラー キューに入れられたり、キューからのメッセージの削除が失敗したり、更新が DB にロールバックされたりしないなど、トランザクション性を失いたくありません。

私は Web を見回しましたが、すべての例でスレッドの CurrentPrincipal を利用して、行を変更したユーザーの ID をバインドしています。私が探しているのは、NHibernate リスナーをメッセージ ハンドラーと同じスレッドに保持するか、ユーザー ID をリスナーに渡して、DB に書き込まれる前にエンティティにバインドできるようにする方法です。

これが私のリスナーです。そこにある Set メソッドを省略しました

ID を抽出して現在のスレッドの ID にバインドする NServiceBus Message モジュールを次に示します。

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

nservicebus - プライベート アクセス レベルを持つ AzureStorageQueueTransport と Azure Storage アカウントで NserviceBus を構成する方法

パブリック アクセスの AzureStorageQueueTransport とストレージ アカウントで NserviceBus を使用していますが、プライベート アクセス レベルの Azure ストレージ アカウントを使用する必要があります。

  1. エンドポイントの作成中に SAS トークンを作成して追加し、メッセージを送信、公開、受信する方法はありますか。
  2. この種の要件に対する NServiceBus からのサポートはありますか。