0

因此,當使用AmazonKinesisFireHoseClient將記錄放入kinesis時,我的網站在高負載時崩潰。使用Amazon Kinesis客戶端時,在使用Amazon Kinesis客戶端時發生高負載網站崩潰問題,並打開連接數

我沒有得到任何例外記錄它只是有點死,你需要重新啓動應用程序,讓它再次運行,有時它只是在崩潰後開始自行工作。

我知道它與打開的連接數有關,但我不知道如何解決它。

這是我的記錄,我作爲實例化一個單身

public class KinesisFirehoseLogger<T> 
{ 
    private string streamName; 

    private AmazonKinesisFirehoseClient client; 

    protected ILogger logger; 

    public KinesisFirehoseLogger(IKinesisLogConfig config, ILogger logger) 
    { 
     this.streamName = config.StreamName; 
     this.logger = logger; 
     this.PartitionKey = config.PartitionKey; 
     AWSCredentials credentials = new BasicAWSCredentials(config.AccessKey, config.SecretKey); 
     this.client = new AmazonKinesisFirehoseClient(credentials, config.Region); 
    } 

    public async Task<bool> WriteToKinesisAsync(T logObject) 
    { 
     using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(logObject) + "\n"))) 
     { 
      PutRecordRequest putRecordRequest = new PutRecordRequest() { DeliveryStreamName = this.streamName, Record = new Record() { Data = ms } }; 

      // Put record into the DeliveryStream 
      return (await client.PutRecordAsync(putRecordRequest)).HttpStatusCode == HttpStatusCode.OK; 
     } 
    } 
} 

我應該使用處置的AmazonKinesisFirehoseClient某處()方法?我怎麼知道該什麼時候打電話。

回答

0

假設client.PutRecordAsync打開連接,那麼也可以將它放在using塊中。例如:

using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(logObject) + "\n"))) 
{ 
    PutRecordRequest putRecordRequest = new PutRecordRequest() { DeliveryStreamName = this.streamName, Record = new Record() { Data = ms } }; 

    // Put record into the DeliveryStream 
    using (PutRecordResponse response = await client.PutRecordAsync(putRecordRequest)) 
    { 
     return response.HttpStatusCode == HttpStatusCode.Ok; 
    } 
}