問題タブ [nservicebus5]
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# - NServiceBus Saga には IPersistTimeouts コンポーネントが登録されていません
NServiceBus の構成中に次の例外が発生するセルフホット WCF ホスト (IIS) があります。
スローされる例外: NServiceBus.Core.dll の 'Autofac.Core.Registration.ComponentNotRegisteredException'
追加情報: 要求されたサービス 'NServiceBus.Timeout.Core.IPersistTimeouts' は登録されていません。この例外を回避するには、コンポーネントを登録してサービスを提供するか、IsRegistered() を使用してサービス登録を確認するか、ResolveOptional() メソッドを使用してオプションの依存関係を解決します。
インメモリ永続性とMSMQ transportを備えた NSB 5.2.9 を使用しています。
これは、セルフホステッド WCF ホスト (IIS) の構成です。App.config がありません! **これは、global.asax での Autofac 登録後に呼び出されます。
すべてのエンドポイントの設定は、 を介してのみ行われますIProvideConfiguration<>
。
プロジェクトのプロパティでNServiceBus.Liteプロファイルが設定されていますが、違いはありません。
私はNSBを初めて使用し、なぜこれが起こっているのか説明できません. 上記を有効にするメソッドを探していましたIPersistsTimeouts
が、見つかったメソッドはすべて古いものとしてマークされており、機能しません。
編集 #1: @DavidBoike によって要求された機能のダンプ
編集#2:
David の提案を適用し、構成を最小限に抑えた後でも、InMemoryPersistence ではなく MsmqPersistence を使用する場合にのみ例外が発生します。他の永続ストレージは試していません。
この例外は、フル バス (SendOnlyBus ではない) を持つ MVC アプリケーションによってスローされ、次のように構成されます。
例外がスローされました: NServiceBus.Core.dll の 'System.NullReferenceException' 追加情報: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
コール スタック:
ServiceBus.Core.dll!NServiceBus.Timeout.Hosting.Windows.TimeoutPersisterReceiver.Poll(object obj) 90 行目 C#
MVC の Autofac 構成:
繰り返しますが、これは、 Some_Endpoint によって公開されたイベントにサブスクライブするMsmqPersistenceを使用する MVC アプリケーションで発生しています。上記の WCF ホストは、最初にその Some_Endpoint にコマンドを送信します。
nservicebus - nservicebus を使用して実行時間の長いプロセスを処理するにはどうすればよいですか
これは多くの人にとって非常に明白なことですが、私のクライアントは、私があまり便利ではないパターンを使用しています。
たとえば、顧客が nservicebus を介してサード パーティ システムに送信される預金または引き出しを送信する場合です。サードパーティのシステムがそのトランザクションを処理する必要がありますが、トランザクションが完了するまでに数日、場合によっては数週間かかる場合があります。
今日の解決策は、トランザクションを第三者システムに渡すためのメッセージを最初に送信する saga を作成することです。完了したら、サガの次のステップは、完了の更新を確認することです。トランザクションが完了していない場合は、'待機のように' requesttimeout が送信されます。タイムアウトに達すると、同じチェックがもう一度実行され、新しい requesttimeout が送信されます...など。これは永遠のループでした。他に行うことは、ServiceInsight を同じ SagaTimeout で何度も完全に満たすことです。
私は一眼レフを調べてきましたが、手短に出てくるようです。すべてのメッセージではなく、特定のメッセージに対してのみ多くの再試行が必要です。
さらに、サードパーティのシステムはトランザクションが完了したというイベントを送信できないため、完了の更新をポーリングする必要があります。
もう1つ、より良い解決策は、トランザクションのステータスを保存し、トランザクションをサードパーティに送信して、この特定の物語を終わらせることです. 次に、時間間隔を使用して完了の更新をチェックするサガを作成します。
このように sagatimeouts を使用するのは一般的なパターンですか? そして、サガ/ハンドラーが完了の更新のみをチェックすることはより良い解決策ですか?
c# - NServiceBus エンドポイントで Entity Framework を使用すると、EntityException がスローされます。
NServiceBus 5.2.9 エンドポイントがあり、NServiceBus を介して DBContext インスタンスを注入しています。
構成:
これはサービスのコンストラクターです。
コンテキスト フィールドにアクセスしようとすると、EntityException が発生します。
例外がスローされました: NServiceBus.Core.dll の 'System.Data.Entity.Core.EntityException' 追加情報: 基になるプロバイダーが Open で失敗しました。
なぜこうなった?
これに対する正しい有効期間が何であるかはわかりません。ですかDependencyLifecycle.InstancePerUnitOfWork
?DBContext は UOW コンストラクトですが、NServiceBus と同じかどうかはわかりません。
このエンドポイントに着信するメッセージは常に 1 つの (トランスポート) メッセージであるため、これは InstancePerUnitOfWork スコープの使用に正しく適用されます。
コンテキスト インスタンスはクラス内で共有されるため、アクセスするたびに次のように syncLock に対してロックします。
スレッドセーフを念頭に置きながら、DBContext を正しく使用するにはどうすればよいですか?
どうもありがとう。
編集: 接続文字列/構成は問題ありません。app.config および/または web.config ごとに構成されているように、同じコンテキストを同じ場所の多くの場所で使用しています。
nservicebus5 - NServiceBus が MSMQ に発行されない
次のコードを使用して、NServiceBus のパブリッシャー/サブスクライバー パターンをテストするパイロットを行っています。 最初に Publish 機能を独立してテストしたかったのです。 ただし、パブリッシャーを個別に実行するたびに、メッセージがエラー ログに記録されます。
Publisher.proj の Program.cs
Publisher.proj の App.config
エラー: 2015-11-22 21:57:01.264 WARN NServiceBus.Faults.Forwarder.FaultManager Message with '396bf681-f7b7-44f7-88b6-a5580169b865' id has failed FLR and will be handover for SLR for retry attempts 1.
nhibernate - 「サブスクリプション」以外のテーブル名を使用するように NServiceBus NHibernate Persistance を構成するにはどうすればよいですか?
「サブスクリプション」以外のテーブル名を使用するように NServiceBus NHibernate Persistance を構成するにはどうすればよいですか?
サブスクリプション ストレージに NServicebus 5 と SQL Server 2008 を使用しています。
次の appSetting でスキーマを設定できました
nservicebus - カスタム NServiceBus プロファイル ハンドラーでエンドポイント構成にアクセスする方法
コードを NSBv4 から NSBv5 (正確には 5.2.12) に移行しており、カスタム プロファイルの実装があります。
ここでエンドポイント構成にアクセスするにはどうすればよいですか?
私は NServiceBus.Host (重要な場合は v6.0.0) を使用してこのアプリをホストしています。これがIHandleProfile<T>
インターフェイスの由来です。
BusConfiguration
は構成ビルダーであり、そこから有用なものを読み取ることはできないようです。プロファイル ハンドラーのコンストラクターにのインスタンスを挿入しようとしましたConfigure
が、クラッシュします。NSB では、ハンドラーにパラメーターのないコンストラクターが必要です。
v5 で廃止され、コンパイル エラーが発生するため、実装IWantTheEndpointConfig
もオプションではありません。古いエラー メッセージには次のように記載されています。
IHandleProfile
のインスタンスが渡されるようになりましたConfigure
(これは私の場合には完璧です)が、私が知る限り、これは真実ではありません(Configure
渡されたものProfileActivated()
がなく、どのように注入できるかわかりません)。
まったく異なるアプローチを使用してプロファイル ハンドラーを再実装する唯一のオプションですか、それとも何か不足していますか?
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.SharedQueue
1.Dequeue(int 32 ミリ秒のタイムアウトで SharedQueue が閉じられました......
また、上記のメッセージの直後にほぼ同じメッセージが表示されますが、RabbitMGPoller.Timeouts からメッセージを受信できませんでしたと表示されます
それに加えて、次のような一定の INFO メッセージがあります: NServiceBus.Transports.RabbitMQ.RabbitMqConnectionManager RabbitMQ ブローカーから切断されました。 .IOException: トランスポート接続にデータを書き込めません: 既存の接続がリモート ホストによって強制的に閉じられました。---> System.Net.Sockets.SocketException: 既存の接続がリモート ホストによって強制的に閉じられました...
DequeueTimeout=600 値をトランスポート接続に追加しようとしましたが、同じエラーが引き続き発生します。また、構成ファイルに次のキーを追加しようとしましたが、それでも役に立たないようです。