如何在 .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。