如何在 .Net Core 中将 kinesisEvent 故障从 Lambda 发送到 SQS
How do I send a kinesisEvent failure from Lambda to SQS in .NetCore
我正在尝试设置一个 Kinesis -> Lambda 工作流,其中错误重试由带有附加死信队列的 SQS 队列处理。我的想法是让 lambda 函数将失败的运动事件推送到 sqs,通过推送到另一个 lambda 函数让 sqs 重试,如果重试失败,则将消息推送到 SQS 死信队列。
我 运行 遇到了障碍,特别是将 KinesisEvent 对象序列化为可以作为消息发送的字符串。
感谢您对此提供的任何帮助。如果我的计划不遵循最佳实践,我也愿意采用其他方式来做到这一点。
JsonSerializer ser = new JsonSerializer();
var amazonSQSClient = new AmazonSQSClient();
SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.QueueUrl = "someQueueURL";
sendMessageRequest.MessageBody = ToJSONString(kinesisEvent);
await amazonSQSClient.SendMessageAsync(sendMessageRequest);
ToJSONString 代码:
private static string ToJSONString(object obj)
{
using (var stream = new MemoryStream())
{
var ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
代码returns一个"timeouts are not supported on this stream"错误
sendMessageRequest.MessageBody
只能容纳 256kb 的数据。因此,将 KinesisEvent 保存为 Json 对象并不是一个好主意。在这种情况下考虑使用 DynamoDB 或 S3。
我正在尝试设置一个 Kinesis -> Lambda 工作流,其中错误重试由带有附加死信队列的 SQS 队列处理。我的想法是让 lambda 函数将失败的运动事件推送到 sqs,通过推送到另一个 lambda 函数让 sqs 重试,如果重试失败,则将消息推送到 SQS 死信队列。
我 运行 遇到了障碍,特别是将 KinesisEvent 对象序列化为可以作为消息发送的字符串。
感谢您对此提供的任何帮助。如果我的计划不遵循最佳实践,我也愿意采用其他方式来做到这一点。
JsonSerializer ser = new JsonSerializer();
var amazonSQSClient = new AmazonSQSClient();
SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.QueueUrl = "someQueueURL";
sendMessageRequest.MessageBody = ToJSONString(kinesisEvent);
await amazonSQSClient.SendMessageAsync(sendMessageRequest);
ToJSONString 代码:
private static string ToJSONString(object obj)
{
using (var stream = new MemoryStream())
{
var ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
代码returns一个"timeouts are not supported on this stream"错误
sendMessageRequest.MessageBody
只能容纳 256kb 的数据。因此,将 KinesisEvent 保存为 Json 对象并不是一个好主意。在这种情况下考虑使用 DynamoDB 或 S3。