如何从Lambda向.NetCore中的SQS发送kinesisEvent故障

时间:2019-07-16 20:34:19

标签: c# aws-lambda amazon-sqs amazon-kinesis

我正在尝试建立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());
    }
}

代码返回“此流不支持超时”错误

1 个答案:

答案 0 :(得分:0)

sendMessageRequest.MessageBody只能容纳256kb的数据。因此,将KinesisEvent保存为Json对象不是一个好主意。在这种情况下,请考虑使用DynamoDB或S3。