c# - 向 Amazon SQS 发送大量消息
问题描述
我有一个 API 在 POST 请求中接收有效负载并将其插入到 Amazon SQS 队列中,以便消息可以被不同的服务使用。基本思想是 API 需要快速将响应返回给调用者,并在稍后的某个时间继续进行繁重的处理。
POST 请求模型:
class Company
{
public int CompanyId { get; set; }
public List<Person> People { get; set; }
}
class Person
{
public int Id { get; set; }
public int CompanyId { get; set; }
public string FirstName { get; set; }
....
....
}
我最初的想法是将整个Company
插入到 SQS 中。但是在某些公司工作的人数可能很大,因此Company
由于 SQS 施加了 256kb 的消息大小限制,因此无法将整体插入 SQS。
所以现在我正在对 API 进行更改,而不是将 a 插入Company
到 SQS 中,它应该插入一个Person
并且消费者将处理Company
-Person
关系。示例:如果具有CompanyId
: 1 的公司有 1000 人,则 API 将向 SQS 插入 100 条消息(每人一条消息,并且每个人的 CompanyId 属性设置为 1)。
这对于序列化后大于 256kb 的公司来说似乎很好,但对于序列化后小于 256kb 大小限制的公司来说效率很低。
问题:我应该如何有效地处理各种规模的公司(处理json
序列化后生产小于 256kb 的公司以及序列化后生产大于 256kb 的公司json
)。
注意:我知道有一个支持高达 2GB SQS 消息大小的 java 库,但我无法从 AWS找到任何可以处理这种情况的等效官方 .NET 库。
解决方案
我相信用于处理较大 SQS 消息的官方库仅是 Java,但您可以相当轻松地重现它的功能。这是您需要在应用程序中实现的伪代码:
if (JSON size > 256kb) {
push json to S3
send SQS message with S3 URL in it
}
else {
send SQS message with JSON in it
}
然后,接收消息的 SQS 客户端只需要检查 JSON 是否在消息中,或者是否需要从 S3 下载它。
推荐阅读
- mysql - 在sql中合并订单状态
- python - 使用 json.loads 解析 json 数组的正确方法是什么?
- sql - 查询哪个输出在同一个运动员位置投票给某人的运动员人数?
- c# - Discord.net bot 中用于管理角色的非更新角色集合
- vue.js - 在发布请求 Vue.js_+Node.js 应用程序中发送多个正文(文本和文件)
- google-cloud-platform - 谁能告诉我这个代码段中的错误是什么我什至尝试按照错误中的说明更新项目 ID,它也给了我一个错误
- html - 使用 vue 将数据发送到另一个 javascript 库
- javascript - Javascript - 通过减少和映射将对象转换为特定数组
- python - 在不同的 Python 文件中加载保存的 NN 模型
- reactjs - 在 React 中同步两个状态而没有无限循环