amazon-web-services - 如何配置亚马逊队列服务消费计数
问题描述
我一直在编写一些群发邮件脚本。它是这样工作的。
1. 从数据库中拉取必须接收电子邮件的用户。目前这个计数是~11k。
2. 将他们的电子邮件地址放入亚马逊队列服务中。
3. 触发另一个从队列服务拉取的 Lambda 代码,有间隔。
4. 找到每个用户的相关产品,构建html模板(Amazon s3)进行邮寄。
5. 使用 Amazon SES 发送它们。
由于 Amazon SES 仅允许每秒最多 14 封电子邮件,因此我必须在拉取时配置消费计数。但它以某种方式消耗太多,SES 给了我错误。
当前代码片段:
module.exports.mail_puller = (event, context, callback) => {
init_aws();
const Consumer = require('sqs-consumer');
const app = Consumer.create({
queueUrl: process.env.QUEUE_URL,
handleMessage: (msg, done) => {
build_email(JSON.parse(msg.Body));
done();
},
waitTimeSeconds: 20,
size: 1,
visibilityTimeout: 1,
sqs: sqs
});
app.on('error', (err) => {
if (err) console.log(err);
});
app.on('empty', (err) => {
if (err) console.log(err);
if (connection && connection.state !== 'disconnected') connection.end();
app.stop();
callback(null, response);
});
app.start();
};
function build_email(obj) {
init_cheerio();
const $t = cheerio.load(obj.tpl);
find_chosen(obj.id).then(products => {
for (let product of products) {
$t('.products-container').prepend(build_product(obj.product_tpl, product));
}
send_email(obj.email, obj.subject, $t.html().toString(), obj.id);
});
}
错误信息:
2018-11-21T01:51:11.039Z daf6727a-ed2f-11e8-9330-c581beef6958 { Throttling: Maximum sending rate exceeded.
at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/query.js:47:29)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
message: 'Maximum sending rate exceeded.',
code: 'Throttling',
time: 2018-11-21T01:51:11.039Z,
requestId: 'ebcebbd1-ed2f-11e8-b6d5-130ef17efa56',
statusCode: 400,
retryable: true }
解决方案
推荐阅读
- node.js - 有时在 Windows 上正常转换失败并出现错误 1
- android - Android 使用 twitter API 获取附近的推文
- java - 如何用这个创建万花筒照片?
- sql - 将查询结果作为新列插入到您正在查询的表中
- html - 如何将 JSON-LD 标记与 REGEX 匹配?
- command-line - 如何使用盐来测试 jinja 功能?
- pandoc - Pandoc:docx 和 LaTeX 格式的不同输出
- php - RegEx 用于捕获括号中的单词
- python - Py_FinalizeEx 未在此范围内声明
- python-3.x - 抓取维基百科信息框地理电子名片