我正在尝试建立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());
}
}
代码返回“此流不支持超时”错误
答案 0 :(得分:0)
sendMessageRequest.MessageBody
只能容纳256kb的数据。因此,将KinesisEvent保存为Json对象不是一个好主意。在这种情况下,请考虑使用DynamoDB或S3。