Webアプリケーションの前に配置し、httpリクエストを非常に受け取りやすいAzure Queue(サービスバスまたはストレージキュー)を作成できるかどうかを知りたいです。Azureキューでhttpリクエストを受信する
アップデート
コメントや回答をいただきありがとうございます。
IISに負荷をかけずにリクエストを処理したいです。 IISに到達する前にキュー内の要求を処理できるようにする必要があります。
Webアプリケーションの前に配置し、httpリクエストを非常に受け取りやすいAzure Queue(サービスバスまたはストレージキュー)を作成できるかどうかを知りたいです。Azureキューでhttpリクエストを受信する
アップデート
コメントや回答をいただきありがとうございます。
IISに負荷をかけずにリクエストを処理したいです。 IISに到達する前にキュー内の要求を処理できるようにする必要があります。
Webアプリケーションの前に置くことができ、http要求を非常に受け付けることができるAzure Queue(サービスバスまたはストレージキュー)を作成できる場合は、
Azure Web Appで要求を渡す前に、要求メッセージをキューに保存してコードを追加することができます。 Azure Storageキューに要求メッセージを記録するC#バージョンのサンプルコードを書きました。以下の手順は参考になります。
手順1.プロジェクトにhttpモジュールを追加します。このモジュールでは、HttpApplicationのBeginRequestイベントを登録し、メッセージ記録ジョブを行います。
public class RequestToQueueModeule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
//clean-up code here.
}
public void Init(HttpApplication context)
{
// Below is an example of how you can handle LogRequest event and provide
// custom logging implementation for it
context.BeginRequest += new EventHandler(OnBeginRequest);
}
#endregion
public void OnBeginRequest(Object source, EventArgs e)
{
HttpApplication context = source as HttpApplication;
AddMessageToQueue(context.Request);
}
public void AddMessageToQueue(HttpRequest request)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(request.HttpMethod + " " + request.RawUrl + " " + request.ServerVariables["SERVER_PROTOCOL"]);
for (int i = 0; i < request.Headers.Count; i++)
{
sb.AppendLine(request.Headers.Keys[i] + ":" + request.Headers[i]);
}
sb.AppendLine();
if (request.InputStream != null)
{
using (StreamReader sr = new StreamReader(request.InputStream))
{
sb.Append(sr.ReadToEnd());
}
}
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection string of your azure storage");
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("queue name which is used to store the request message");
// Create the queue if it doesn't already exist.
queue.CreateIfNotExists();
// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage(sb.ToString());
queue.AddMessage(message);
}
}
ステップ2. web.configのsystem.webServerノードに上位モジュールを登録します。あなたのモジュールが配置されている名前空間の名前を変更してください。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="RequestToQueueModeule" type="[your namespace name].RequestToQueueModeule" />
</modules>
</system.webServer>
私はIISをburdingせずに要求を処理します。 IISに到達する前にキュー内の要求を処理できるようにする必要があります。
要求がIISに届く前にキューで処理する場合は、Azure Web Appの前にプロキシを追加する必要があります。 Azure Application Gatewayはプロキシとして動作し、Web Appの前に置くことができます。 HTTリクエストの主な情報のみを記録する場合は、Azure Application Gatewayを使用してアクセスログをオンにできます。詳細については、下記のリンクを参考にしてください。
Diagnostic logs of Application Gateway
あなたはすべてのリクエスト・メッセージを保存したい場合は、私はあなたがカスタムプロキシを構築し、自分で要求をログに記録する必要があるかと思います。
あなたの質問の更新に基づいて返信を修正しました。 – Amor
ありがとうございました。このような解決策が必要な理由は、顧客がアイテム(パケット)をトレースするために使用するアプリケーションがあるからです。それはデータマイニングを何度も受けました。私たちは再チャプターを使いたくありません。このソリューションによって、私はオーガニック要求と非オーガニック要求(適切なItemIdが含まれているがロボットからの要求である)を区別し、それらをオーガニック要求のために速くし、非オーガニックのために遅くするために異なるレイテンシを持つ2つの異なるキューリクエスト。 – user217648
URLにItemIdが渡されていますか?パスベースのルーティングをサポートするアプリケーションゲートウェイを使用できます。 ItemIdがHTTPヘッダーで渡された場合、それをルーティングできるAzureサービスはありません。おそらくあなたはVMを作成し、いくつかの逆プロキシを使ってそれを行うことができます。例えば、[Nginx](https://sites.psu。edu/jasonheffner/2015/06/19/nginx-use-different-backend-based-http-header /)を使用します。 – Amor
各リクエストを順番に処理しますか?あなたがOWINの上にあなたのWebアプリケーションを構築していたなら、あなたが望むことをするミドルウェアを登録することができます。 – woelliJ
質問を詳しく教えてもらえますか?あなたが達成しようとしていることは明確ではありません。 –