問題タブ [masstransit]
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# - MassTransit-クライアントへのメッセージの更新
私はMSMQの使用経験があまりなく、ソリューションの実装を支援するためにMassTransitを調べることを勧められましたが、MassTransit+MSMQを使用することがその仕事に適したツールであるかどうかを判断するのに苦労しています。
複数のユーザーが使用するWPFアプリケーション(3.5)があります。永続性は、アプリケーションから(NHibernateを介して)データベースに実行されます。これまで、ユーザーは最新の更新を確実に行うために、ビューを定期的に更新していました。ただし、エンティティがpub / subメッセージングを使用して永続化されたときに、各アプリケーションインスタンスに通知を送信する必要があります。クライアントアプリケーションはすべて同じドメイン内で実行され、必要なほとんどの依存関係を満たすことができる必要があります(たとえば、クライアントマシンへのMSMQのインストール)。
要約すると、Client1は更新メッセージを公開します---> ????? ---->他のすべてのアクティブなクライアントがそれを受け取ります。
私はMSMQを初めて使用するため、アーキテクチャがどのようになるべきかさえわかりません。
- メッセージを受信するには、各クライアントマシンにローカルMSMQキューが必要ですか?
- サーバー上にキューを作成するだけで、すべてのクライアントがそこでメッセージをリッスンする必要がありますか?もしそうなら、キューだけで十分ですか、それともメッセージを正しく配信するためにサービスを作成する必要がありますか?
- これはその仕事に適したツールでさえありますか?
私はそれがうまくいくことを期待して少しPOCを作成しましたが、私は「競合する消費者」と呼ばれるものになりました。私がしたいのは、1つのアプリケーションインスタンスがメッセージを送信し、すべてのアプリケーションインスタンスがそれを受信することです。
任意の提案、方向性またはアドバイスをいただければ幸いです!
これがPOCビューモデルコードです(注-私の考えでは、ローカルホストは各アプリインスタンスがメッセージを送信するサーバーに置き換えられます):
更新:ネットワークキーを追加(子猫)
更新:サンプルコードhttps://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0ByDMJXKmYB7zMjBmYzYwNDEtYzMwOC00Y2RhLTk1MDYtZjc0NTI2M2E3Y2Qy&hl=en_USをアップロードしました
更新:誰かが興味を持った場合に備えて、私たちは「イベントバス」を2つに分割することになりました。サーバーには、MassTransitを使用しています。ただし、大量輸送には「フルプロファイル」(.NET 4.0)が必要であり、WPFインスタンスには「クライアントプロファイル」を使用したかったため、クライアント側のイベントバスにはSignalRを使用しています。サーバーイベントバスの「オブザーバー」は、メッセージをクライアントイベントバスに転送します。
c# - MassTransit をデバッグで初めて実行する場合、キューの作成中にエラーが発生しました。権限が不十分です
MassTransit を使用するように MVC サイトと処理サービスの両方をセットアップしました。別のマシンで起動したときに mt_ キューが作成されないという問題が発生したため、キューを削除する必要がありました。現在、アプリケーションを実行すると、キューを作成できないというエラーが表示されます。
私の構成;
ServiceBusQueue が msmq://localhost/sample_queue に設定されている
以前にこの問題が発生しましたが、コードを最終的なアプリケーションに入れると、問題はなくなりました。管理者として Visual Studio を実行しています。
どのような権限が必要ですか? それらをどこに設定しますか?
asp.net - Webファーム用のサービスバス(多分?)
この質問の一部は、正確に何を尋ねる必要があるのかさえわからないということです。そこで、状況から始めて、そこから解決していきます。
私が取り組んでいるプロジェクトの1つは、aspCometライブラリを介したCOMETの使用です。プログラムのユースケースは、いくぶん共同のスライドショーです。1人がその大部分を実行し、1人以上の参加者が特定のアクションを実行できます。画面上でアクションが実行されるまでの待ち時間が短い
以前は、1台のサーバーで実行されていました。今、パフォーマンス上の理由よりも信頼性のために、少しスケールアウトしたいと考えています。つまり、Rackspaceのクラウドにはいくつかのボックスがあり、楽しいものがすべてあります。
同じ「ショー」の異なる人々が異なるサーバー上にいる可能性があるため、COMETのものの動作にいくつかの変更を加える必要があることを最初から知っていました。また、「ショー」が何であるかを知る方法がありません。彼らはすでにサイトに到着するまで所属しています。
私は当初、WCFメッシュプロバイダーを使用してこれに取り組みましたが、最初は十分に文書化されていませんでしたが、メッセージのディスパッチが失われたり、遅延したりする問題が発生しています(何が起こっているのか100%わかりません)そこに)、しかしそれはCOMETの長いポーリングを台無しにし、かなり奇妙な方法で物事を壊します(ボタンをクリックするとイベントがトリガーされるか、10秒間ハングします{長いポーリング期間}、実際には何もしません)。
より多くの調査により、.Netサービスバスプロバイダーの1つが私が必要とすることを行う可能性があると私は信じています。ただし、必要なものをカバーする例が見つかりません。
- 単一障害点なし(データベース外)
- ピアのハードコーディングはありません。
- ほぼリアルタイム(ポーリングなし、イベントベースが最適)
私の理想的な解決策は、サーバーが起動したときに、他のサーバーにその存在を知らせ(テーブルのどこかの行であっても)、各サーバーが両方である状態で、相互にブロードキャストメッセージの送信を開始できるようにすることです。パブリッシャーとサブスクライバー。これは私がWCFメッシュプロバイダーにいくらか持っていたものですが、私はそのコードに過度に自信がありません。
誰かがこれで私を正しい方向に向けることができますか?この時点では、サービスバスプロバイダーのドキュメントで探すべき適切な用語でさえも良いでしょう。それとも、サービスバスは私が欲しいものではありませんか?この時点で、各WebサーバーにJabberサーバーをセットアップすることに決め、制約内に収まる場合はそれを使用します。
c# - MassTransit での PubSub の例
MassTransit で pub/sub プロジェクトのサンプルを読んだ後、頭を悩ませました。
サンプルでは、クライアント アプリケーションはサブスクライバー アプリケーションが架空のユーザーのパスワードを更新するための要求を発行します。このサンプル コードは問題なく動作し、このプロジェクトの跳ねるボールを簡単にたどることができます。
でも -
実際の環境では、pub/sub の目的は (私の理解では)、少数のパブリッシャーが多数のサブスクライバーとやり取りすることです。何らかの種類の CRUD 操作を実行するサブスクライバーの場合、通信パターンによって、複数のサブスクライバーがメッセージを処理できなくなるのではないでしょうか? たとえば、20 人のサブスクライバーが同じデータベース レコードを更新しようとするのは望ましくありません。
これは単なる見当違いのサンプル プロジェクトのケースですか?
pub/sub を CRUD 操作に使用できる場合、フレームワークをどのように構成して、1 つのサブスクライバーのみが操作を実行できるようにしますか?
パブリッシュ/サブスクライブの目的に関する基本的な情報が完全に欠落しているだけですか?
提供された説明に感謝します...
デビッド
c# - Masstransit を使用してコマンドおよびイベント ベースのシステムをテストする方法
操作が実行されたときにイベントを発生させるドメイン オブジェクトの操作を呼び出すコマンド ハンドラーがあります。対応するコマンドが送信されたときに、イベント ハンドラーがイベントを受信することをテストしたいと思います (以下を参照してください。簡潔にするために一部のコードは省略されています)。イベント メッセージがバス (この場合はループバック バス) に発行されても、イベント ハンドラー (MyEventConsumer.Consume) は呼び出されません。何か案は?
msmq - 競合する消費者向けソリューションをどのように実装するか?
演習として、競合する消費者を実装する例を見つけようとしています。
多くのプロデューサ - > MSMQueue < - 競合するコンシューマ
これまでのところ、これを達成する方法に関するドキュメントは見つかりませんでした。が MassTransit または NServiceBus でどのように実装されているかを理解しようとする私の最初の試みは、多くの間接的な層に失敗しました。
どんな助けでも大歓迎です。
.net - 複雑なメッセージと Masstransit の逆シリアル化
コンパイル時に型がわからないため、いくつかのオブジェクト型のプロパティを持つメッセージを MT で発行します。コンシューマーでメッセージを受け取ると、オブジェクト型のプロパティに Newtonsoft JObject インスタンスが設定されていることがわかります。JObject クラスは、Masstransit.dll の ILMerged Newtonsoft.Json アセンブリにあります。このアセンブリの JObject-Class は internal とマークされています。Newtonsoft.Json の Nuget-Assembly によって提供される JObject にプロパティ値をキャストしようとすると、常に失敗します。
だから私の質問は:
- プロパティ値をJObjectにキャストする正しい方法は何ですか?
- キャストが失敗するのはなぜですか?つまり、ここでclrが抱えている困難は何ですか?
- コンシューマーで未加工のシリアル化されていないメッセージ本文を取得できますか?
ありがとうございました。
masstransit - MassTransitからのコンソール出力をどのように構成しますか?
MassTransitを使用した単純なコンソールアプリケーションがあります。私のバスはMSMQを使用するように構成されています。
バスを起動してメッセージを送受信すると、コンソールに大量のJSONが吐き出されます。これはネットワークを介して送信されるデータであると想定していますが、この出力をどのように構成し、どこに送信するのですか?
msmq - MSMQ/MassTransitサービスバスを介して到着しない最初のメッセージ
MSMQ上でMassTransitServiceBusを実行しています。バスを介して送信された最初のメッセージが到着していないようですが、後続のメッセージは到着しますか?
メッセージが送信される前にキューまたはバスで実行する必要のある初期化はありますか?