問題タブ [easynetq]
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# - バスからのコマンドを解決する
現在、コマンド同期の処理から離れて、後で処理できるようにメッセージ バスに配置していますが、コマンドを 1 つずつ入力するのではなく、コマンドを読み込もうとすると、実際の型を取り戻すのに問題があります。
これが私がこれまでに持っているもので、うまく機能しているようです
コマンドディスパッチャー
コマンドのサブスクライブ
メッセージの処理
私は基本的に慣例に従ってメッセージを解決したいので、ここに移動したいので、各コマンドタイプを入力する必要はありませんが、タイプを元に戻すのに問題があります
x は、Handlecommand メソッドに渡すことができない単なるオブジェクトです。
コンテナーには autofac を使用し、バスには easynetq を使用しています。
c# - EasyNetQ フィールドが見つかりません 'RabbitMQ.Client.ConnectionFactory.AutomaticRecoveryEnabled'
EasyNetQ v0.63.0.448、RabbitMqClient v4.0.2、RabbitMq サーバー 3.6.5 でバスを作成しようとすると...
エラーが発生します:
"フィールドが見つかりません 'RabbitMQ.Client.ConnectionFactory.AutomaticRecoveryEnabled'."
これは、easynetq とこのバージョンの Rabbit の間の根本的な非互換性ですか、それとも反映する必要がある API のどこかに変更がありますか?
c# - EasyNetQ/RabbitMQ クライアントが IIS Web アプリケーションで応答を取得しない
IIS で実行されている Web アプリケーションを Windows サービスに接続するために、EasyNetQ/RabbitMQ を使用しています。ただし、リクエスト/レスポンスが機能していないようです。コードの問題ではないことは確かですが、次にどこを見るべきかについてのアイデアが不足しています。
これは完璧に動作するテスト コンソール アプリケーションです。
一方、これは同じテスト コードですが、Web アプリケーションです。
Web アプリケーションはメッセージを問題なくキューに送信し、バックエンドで処理します。バックエンドは、応答に正しいcorrelationIDを提供し、それをキューに入れます。しかし、私にはよくわからない何らかの理由で、Web アプリケーションは応答を受け取りません。
Web アプリケーションは、最終的にタイムアウトを取得します。ただし、タイムアウトの長さは問題ではありません。応答をキューに入れるのに約 2 秒しかかからず、タイムアウトを両側で 2 分に変更しても違いはありません。
誰かが何を修正するための準備ができている解決策を持っていますか? または、どこを見ればいいですか?EasyNetQ または RabbitMQ について理解できることはすべてグーグル検索しましたが、同様の問題について報告した人を見つけることさえできませんでした。
--karri
c# - EasyNetQ を使用して RabbitMQ から切断してから再接続する方法は?
RabbitMQ から切断し、EasyNetQ を使用して再接続する必要がある状況にあります。ドキュメントに記載されているように、IBus を破棄することでこれを行っています。
https://github.com/EasyNetQ/EasyNetQ/wiki/connecting-to-rabbitmq
「接続を閉じるには、単にバスを破棄します...これにより、EasyNetQ が使用する接続、チャネル、コンシューマー、およびその他すべてのリソースが閉じられます。」
ただし、新しいバスを作成するために呼び出しを行うと、まだ切断されて破棄されていると表示されます。
この時点でコンシューマをリセットしようとすると、「バスが破棄されました」というメッセージとともに EasyNetQException が発生します。
バスを処分した後、バスを再作成できないのはなぜですか?
.net - メッセージの順序付けられた「処理」を保証するための FIFO キュー (複数のコンシューマー)?
今日、この質問を受けましたが、その答えはチーム内で意見が分かれているようです。
シナリオ 特定のトピックに関するイベント (メッセージ) を (EasyNetQ 経由で) RabbitMQ に送信する複数のパブリッシャーがいます。彼らはFIFOを保証すると言いました。彼らは、「トピック」のメッセージを順番に「処理」することを保証するシステムを構築したいと考えています。
私の解決策 トピックごとに「バージョン番号」を保持するキャッシュを用意し、シーケンスが一致しなかった場合はメッセージの処理を保留します。最初のイベント処理が完了し、キャッシュが新しいターゲット バージョンに更新された後、メッセージの処理を再試行できます (時間遅延再試行)。これは、コンシューマーが基本的に別のコンシューマーが処理を完了するのを待っていることを意味します。これは、一種のロックであるため、数秒ではなく数ミリ秒かかるものに対して機能します。
あるいは、このhttp://blog.jonathanoliver.com/cqrs-out-of-sequence-messages-and-read-models/のように、順不同のイベントの保持テーブルを実装できると言いました
問題を提起した人は、それらの答えは両方とも間違っていると言いました.
彼らが言った解決策は、ルーティングキーと直接交換を使用し、トピックを常に同じコンシューマーに送ることでした。スティッキー負荷分散システムのようなものです。任意の時点でのコンシューマーの数に応じて交換/バインディングを更新する必要があるため、これによりシステムのオンデマンドのスケーラビリティが制限されることを指摘しました。
以前にこのパターンを実装したことがある人の意見を聞きたいです。ここには正しい解決策と間違った解決策がありますか?それとも、処理の遅延やスケーラビリティなどに基づいて正しい戦略を選択するケースですか?
編集:明確にするために。どのソリューションが自分の状況により適しているかを判断するために、各アプローチの長所と短所を見つけることを期待しています。落とし穴などはありますか?
.net - 複数のサブスクライバー
別のアプリケーションから発行されたイベントをリッスンするために EasyNetQ を使用する .NET アプリケーションがあります。アプリケーションは SignalR を使用して、受信したイベントをダッシュボードに発行します。
octopus deploy を使用してアプリケーションをデプロイしていますが、問題は、アプリケーションの新しいバージョンがデプロイされるたびに、バスに投稿されたすべてのメッセージを受信しなくなることです (すべてではなく一部を取得しているようです)。同じ ID を持つ複数のサブスクライバーを持つことについて読んだことがありますが、これが問題であると推測しています。
メッセージを「失う」ことを避けるために、これをどのように処理すればよいですか?
また、同じアプリケーションの異なるインスタンス (たとえば、同じウサギの mq インスタンスに対して作業している複数の開発者) を実行し、すべてのクライアントがすべてのメッセージを受信するにはどうすればよいでしょうか?
rabbitmq - RabbitMqで失敗したパブリッシュを処理するには?
メッセージング サービスに RabbitMq を使用する予定です。すべてのメッセージ リクエストを RabbitMq 永続キューに発行します。
.Net クライアントの場合、EasyNetQ を使用することにしたので、問題は、メッセージを発行している間、RabbitMq サーバーをどのように処理するかということです。
- 例外をキャッチしてメッセージをデータベースに保存し、スケジュールされたジョブで再発行する必要がありますか?
- サーキットブレーカーを使用する必要がありますか?
- または他に何ですか?あなたの経験を聞きたいです。
c# - EasyNetQ パブリッシュおよびコンシューム
私は EasyNetQ と RabbitMQ を初めて使用します。残念ながら、メッセージの消費に問題があります。パブリッシュが間違っているのか、それとも消費が正しくないのかわかりません。公開することで確認できます。キューに送信し、消費するとキューから削除されます。ただし、メッセージが返されるとnullが返されます:S IAdvancedBusを使用しています
公開用のコード スニペット:
消費するためのコード スニペット: