問題タブ [request-response]
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 - request-response からの応答の取得は問題ありませんが、メッセージが追加され、スキップされたキューから削除されましたか?
これが正常な動作だと言うことは何も見えませんでしたので、盲目でしたらすみません笑。要求応答で MassTransit を使用すると、少し奇妙なことがわかりました。
そのため、データベースからデータを取得するなど、単純なタスクを実行するためのさまざまな要求をリッスンするサービスに複数のコンシューマーがいます。
各コンシューマーをテストするために、各コンシューマーに対して要求を実行し、応答を確認するコンソール アプリを作成しました。
私が気付いているのは、最初の要求と応答が正常に機能することですが、コードが実行されると次のチェックが応答を受信しますが、メッセージはスキップされたキューに移動されて削除されます。
これは、2 番目のリクエストの大量輸送ログです。
送信
[2021-05-14 10:27:11.812 DBG] (MassTransit.)-SEND rabbitmq://192.168.0.25/Ksrs.Requests:ConceptByConceptNoRequest d9360000-cf5b-480f-418f-08d916ba7421 Ksrs.Requests.ConceptByConceptNoRequest
受け取る
[2021-05-14 10:28:00.203 DBG] (MassTransit.ReceiveTransport.)-RECEIVE rabbitmq://192.168.0.25/DESKTOP99KLG9M_Tests_bus_5r5yyygxmpry6jgtbdctpqurrb?temporary=true d9360000-cf5b-480f-2626-08d916ba7429 Ksrs.Response.ConceptResponse MassTransit. MessageHandler<Ksrs.Response.ConceptResponse>(00:00:00.0004546)
スキップ?
[2021-05-14 10:28:41.361 DBG] (MassTransit.ReceiveTransport.)-SKIP rabbitmq://192.168.0.25/DESKTOP99KLG9M_Tests_bus_5r5yyygxmpry6jgtbdctpqurrb?temporary=true d9360000-cf5b-480f-ce25-08f3d91
まだ応答があるのにスキップが理解できません。応答は期待どおりで、コードは次に進むことができます。
これはクライアントのリクエストとレスポンスのコードで、すべてのチェックでほぼ同じです。唯一の違いは、リクエストとレスポンスのタイプです。
いくつかのメモ:
コンテナーとして Autofac を使用します。
ロギングには Serilog を使用します。
メッセージ ブローカーとして RabbitMQ (3.8.16) を使用します。
更新: 興味深いものを見つけました。次のログ行を各コンシューマーに追加したので、実行されていることがわかります。
ここで、Consumer1、Consumer2、および Consumer3 があるとします。これはログに表示されています。
Request for Consumer 1
SEND blah blah
RECIEVE blah blah
Request for Consumer 1
Request for Consumer 2
SEND blah blah
RECIEVE blah blah
Request for Consumer 1
Request for Consumer 3
SEND blah blah
RECIEVE blah blah
SEND blah blah
RECIEVE blah blah
そのため、Consumer 1 は実行を続けているようですが、コンシューマーごとにメッセージ タイプが異なり、クライアントがそれを呼び出していない場合、その理由がわかりません。
c# - C# を使用して Artemis で要求応答メッセージを送信する
ArtemisNetClient を使用して C# で要求応答パターンを実装しようとしていますが、実際のソリューションでより一般的な方法で実装する方法を見つけるのに少し苦労しています。
いくつかの Java の例に基づいて、2 つのコンソール アプリケーションで次のようなことができました。
送信者
レシーバー
これは期待どおりに機能しましたが、リクエスト レスポンス パターンの例がないことを除いて、この記事で説明されている内容のさらに下に何かを記載したいと思います。
詳しく説明すると、現在、通信したい 2 つのサービスがあります。
サービス 1では、メッセージを作成して発行し、応答を待ってインスタンス オブジェクトを強化し、データベースに保存します。私は現在これを持っていますが、await 応答メッセージがありません。
応答メッセージの返信をサポートするために、一時的なキュー/接続または何かを設定し、PublishAsync()
それを変更する必要があるかもしれないと考えました。Task<Message>
しかし、どうすればそれを行うことができますか?コンソール アプリの例のように、新しい connectionfactory +CreateConsumerAsync
などを実行する必要がありますか?
サービス 2には、メッセージInstanceCreatedConsumer
を受信する がありますが、ここでも応答メッセージを返す方法がありません。
戻り値で応答メッセージを処理するandを使用してActiveMqExtensions
クラスを拡張できるかもしれないと考えましたが、まだ実現していません。ConsumeAsync
HandleMessage
ここで達成しようとしていることは完全に間違っていますか、それとも ArtemisNetClient では不可能なのでしょうか?
誰かが例を持っているか、私が正しい道を進んでいるかどうかを確認できるか、別のフレームワークを使用する必要があるかもしれません。
ActiveMQ Artemis などのメッセージを介したこの種のコミュニケーションは初めてなので、アドバイスをいただければ幸いです。
c# - HttpWebRequest.GetRequestStream() が TEST プロジェクトでのみ機能しない
以下は、API 呼び出しを行うコードであり、API 呼び出しから正常に結果が得られます (Satus:200)。同じシナリオに Unite テスト ケースを追加したかったのですが、Unite テスト ケースから API 呼び出しが失敗しhttpWebRequest.GetRequestStream()
、コード内の ( ) 呼び出しに到達すると 503 サーバーが利用できないか、タイムアウトが返されることがわかりました。しかし、同じ API 呼び出しが私のメイン アプリケーションで N + 回成功として正常に動作します。以下はコードです。
My Unit テスト ケース メソッド
メソッドはFetchToken
メイン アプリケーションで完全に正常に動作し、ユニット テスト ケースでのみ問題が発生します。必要なすべての API エンドポイントと資格情報がアプリケーションとユニット テスト ケースの両方の構成に同じように配置されていることを確認しました。
apache-kafka - apache kafka を使用したリクエスト応答パターンの実装
Apache Kafka で要求/応答パターンを実装するにはどうすればよいですか? 実装は、サービス インスタンス (kubernetes の fe ポッド) のスケーリングでも機能する必要があります。
うさぎでは、他のサービスからの応答を受信するインスタンスごとに、永続的ではない一時的な一意のキューを作成できます。このキューは、接続が失われたとき (サービスのインスタンスがダウンしたとき) に自動的に削除されます。
どうすればカフカでこれを行うことができますか? このソリューションを拡張する方法は?
ノードjsを使用しています