問題タブ [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.
asp.net-web-api - サブスクライバーとして asp.net Web API を使用する EasyNetQ
rabbitMQ のサブスクライバーとして機能する asp.net Web API を実装する必要があります。Windows サービスは、Web API サービスにメッセージを発行しようとしています。実稼働環境で実行されている Web API の複数のインスタンスが存在します。Web API でサブスクライバー チャネルを開き、IIS が再起動するまで開いたままにしておく方法がわかりません。1 つのパブリッシャーと複数のコンシューマーが存在します。
最初にサンプルコードを教えてください。
どんな助けでも大歓迎です
rabbitmq - EasyNetQ で受信確認をキューに入れる
メッセージが実際にキューに入れられたという非同期確認を受け取りたいです。私はかなり検索し、確認のために EasyNetQ を使用するさまざまな方法を試しましたが、そのような確認を与える接続構成とコードPublishAsync
の組み合わせを見つけることができないようです。Bus
おそらくPublishAsync
これを行う方法ではありません.EasyNetQ APIで何か他のものを見落としていますか? EasyNetQ でこのシナリオを実装した経験のある人はいますか?
c# - EasyNetQ/RabbitMQ メッセージ ハンドラーで Ninject を使用する
Ninject で EasyNetQ を使用してメッセージを記録しようとしています。
Ninject を EasyNetQ DI としてセットアップすることはできましたが (私はそう思います)、メッセージがパラメーターなしのコンストラクターなしでハンドラーに到達すると (たとえば、そこにバインドされたリポジトリが必要です)、解決しません。または、コンソールでかなり一般的なエラーが発生するため、少なくともそれが問題だと思います。
EasyNetQ に Ninject を次のように使用するように指示します。
これだけ設定すればいいと思います。Ninject アダプターは、EasyNetQ のものです。
私のハンドラは次のようになります:
パラメーターなしのコンストラクターを追加し、代わりに ServiceLocator (Ugh) を介して Ninject を使用できるように設定すると、機能します。ハンドラーは正常に呼び出され、ServiceLocator を介してリポジトリを見つけることができるため、少なくとも Ninject がリポジトリについて知っていることがわかります。
メッセージを処理しようとしたときにポップアップするエラーは.
c# - EasyNetQ でのポリモーフィック リクエスト - レスポンス
ポリモーフィック パブリッシュ/サブスクライブと同様の方法で、EasyNetQ でポリモーフィック リクエスト/レスポンスを実行できるかどうか疑問に思っていました。
これは、Mike Hadlow の例をCat
s とDog
s (上記のリンクを確認してください)で使用する例ですAnimal
が、インターフェイスではなくクラスです。私は次のようなことをしようとしています:
受信側に次のものがあれば、
Animal
の代わりにとして送信されるため、リクエストがレスポンダーによってキャプチャされることはありませんDog
。
ここでのポイントは、リクエストが何を送信しているか ( を送信しているという事実は別としてAnimal
) をあまり気にせず、入力はシステムのさまざまな部分から来るため、事前に正確なタイプを知ることができないということです。さまざまなサブクラスに応答するさまざまなリスナーが存在するため (1 つのリスナーDog
と の別のリスナー)、リクエストCat
をただリッスンすることはできません。に関係なく同じになります。Animal
TResponse
TRequest
ポリモーフィックなパブリッシュ/サブスクライブと同等のことを行う方法はありますか? たとえば、次のようなものです。
よろしくお願いします!
編集:詳細:
現在私のコードベースでは、実行時にしか知らないbus.Publish(msg.GetType(), msg);
インスタンスタイプに基づいてメッセージを正しいリスナーに適切にルーティングするために、(拡張) メソッドを使用しています。これにより、さまざまな種類のメッセージを発行する方法として同じ関数呼び出し (コード フロー分岐なし) を提供することで、 のようmsg
なコードの重複を回避できます。のようにこのメソッドを複数回呼び出すのを避けるために、非ジェネリックメソッドも使用し、 のように使用したかったのです。うまくいけば、これを避けることができます:実行時にジェネリック メソッドを呼び出します。bus.Publish<Dog>(msg)
bus.Publish<Cat>(msg);
bus.Request()
bus.Request(msg.GetType(), string.GetType(), msg)
bus.Request<Dog, string>(msg)
bus.Request<Cat, string>(msg);
signalr - フィールドが見つかりません:「RabbitMQ.Client.ConnectionFactory.VirtualHost」
以下のコードを使用して、C# のキュー コンシューマーからSignalR.RabbitMQ ( https://github.com/mdevilliers/SignalR.RabbitMq ) を使用して、RabbitMQ メッセージングを使用しようとしています。
しかし、残念ながら、失敗します:
エラーで:
コンソールアプリでも同じ接続が正常に機能します。VirtualHost を削除しても、同じエラーが発生します。
何が悪いのかわかりません。ここで同じエラーが見つかりました: https://github.com/MassTransit/MassTransit/issues/204しかし、私には役に立ちません。EasyNetQ の最新バージョン (0.40.3.353) と RabbitMQ クライアントの最新バージョン (3.4.3) を使用しています。
c# - MOM のメッセージ メタデータ
NServiceBus、RabbitMQ、MassTransit、EasyNetQ の調査を開始しています。
私が特に理解したい詳細の 1 つは、公開されたすべてのメッセージでメタデータのカスタム セットが常に送信されるようにする方法です。
たとえば、メッセージ プロデューサが何をパブリッシュするかに関係なく、次の情報が常にメッセージの一部として送信されるようにしたい場合があります。
- タイムスタンプ
- ワークフロー名
- 優先順位
メタデータが何であるかは重要ではありません。重要なのは、そのような任意の情報を転送するオプションまたは機能を持つことです。
プロデューサーによって送信されたメッセージの名前空間とクラス名が、メッセージの「ルーティング キー」に自動的に変換されるという考えが気に入っています。ただし、追加のメタデータをメッセージに添付するには、任意のメッセージをラッパー オブジェクトのペイロードに変換できる、ある種の「公開前」フック ポイントが必要になる場合があります。そのような:
この場合、「ルーティング キー」に の名前または名前空間を含めたくありませんBaseMessage
。シリアル化される前のペイロード タイプは、その「ルーティング キー」のベースとなるものです。
もちろん、これはすべて、消費者が BaseMessage とペイロードの両方を逆シリアル化するための便利な方法を持っていることも前提としています。
では、私がリストしたツールのうち、この種のニーズをサポートしているのはどれでしょうか? 該当する場合は、構文例を示してください。