有点背景,我正在使用 Serverless 和 .Net 来创建一个带有 SQS 触发器的 lambda。事件触发器设置为批量大小为 10k,等待时间(Batch Window ie MaximumBatchingWindowInSeconds)为 30 秒。队列的可见性超时设置为近 16 分钟。
现在我已经将 lambda 设置为仅 1 的保留并发并运行了一个测试,我向队列发送了 100 个项目,并希望看到只有一个 lambda 调用正好包含这 100 个项目。
问题是它分离了队列中的项目并改为调用 lambda 5 次,导致创建了五个包作为 lambda 功能的一部分,而不是我想要的一个包。(仅供参考,lambda 的输出会在消息的 s3 中创建包。我希望减少大包。)
现在的问题是:这是预期的行为吗?如果是这样,为什么会这样,当我将队列设置为最多累积 10k 个项目而不是 15 个时。
根据aws 文档,如果有效负载大于 256kb,则 lambda 可以获取比 batchSize 更少的消息,但我的消息非常小,100 条消息远不及 256kb。所以这不可能是原因。
也欢迎提供有关处理此问题的替代方法的建议,现在我正在考虑运行一个事件桥调度程序,该程序使用 SQS ReceiveMessage api 调用 lambda 并创建一个包,但我还必须确保之后正确删除队列.
我在这里有点无能为力,我很感激你们的任何想法。谢谢。
我一直在试图创建一个完全是.NET Core的新项目,这个项目可以在不同的环境中运行,但我需要添加许多以前在严格的.NET Framework中工作的项目作为参考(4.5 ).
到目前为止,我能够做的是将.NET 461框架添加到项目json中,
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
],
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Niloosoft.Hunter.ServicesDataAPI": {
"target": "project"
}
}
},
"net461": { }
}
Run Code Online (Sandbox Code Playgroud)
它成功恢复了包,我甚至设法添加了.NET框架引用,但我似乎无法正确使用它们而且我得到了这个错误.
所以,我的问题是,目前是否可以使用我的.NET Framework参考,而无需将预期的框架(因为我需要互操作性)与以下内容交换:
> #if NET45
//specific code for .NET 4.5
> #
Run Code Online (Sandbox Code Playgroud)
需要注意的是,.NETCoreApp不支持我的项目,因此,我确实需要.NET Framework,我只是需要知道我正在尝试做的是否可行.