Azureブロブストレージを使用してデータフィード(約1.5GBのデータを受信)からの受信メッセージを保存し、メッセージを介してトリガーされたメッセージを処理していますキュー(rabbitmq)。 - Azureのブロブで>ストアXMLファイル - >Azure Blobストレージ.NetクライアントライブラリとTCP接続(時間の経過)
コンシューマー・キューにブロブアドレスを公開 - >キューからブロブアドレスを読む - >メモリ
でダウンロードブロブをプロデューサー:ここでセットアップがどのように見えるかです
private string GetBlobText(string containerName, string blobName)
{
// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Settings.Default.DatafeedStorageConnString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
return blockBlob.DownloadText(Encoding.UTF8);
}
このパイプラインはかなり頻繁ペースで実行されているので、我々はプログラムがソケットエラーを受信を開始時間をかけて(数週間)ことを参照してください。
そして、ここでは、各メッセージに対して実行されるダウンロードブロブ方法です。ここでは、トレースは次のとおりです。
Microsoft.WindowsAzure.Storage.StorageException: Unable to connect to the remote server ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 40.68.232.24:443
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 695
--- End of inner exception stack trace ---
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 604
at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.DownloadRangeToStream(Stream target, Nullable`1 offset, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlob.cs:line 675
at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.DownloadToStream(Stream target, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlob.cs:line 234
at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.DownloadText(Encoding encoding, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 1279
これは、私たちがblobClientを再利用しようとした接続を効率的に処理していないとの問題、のように思えるが、それは私たちを助けていません。これを解決するためにさらに何を検討すべきでしょうか?
異なるコンピュータ上でインスタンスを分割することによってスケーリングが間違いなく役立ちます。しかし、私たちが直面している問題は、TIME_WAITを使用したTCP接続がポートを使い果たしてしまうことです。 – maulik13