我想要实现的目标:我通过AWS SES接收电子邮件并将其存储到AWS S3.然后,电子邮件由AWS Lambda函数解析,结果存储到数据库.在创建新对象时,S3会调用Lambda.
问题:我的数据库中只有一小部分(我会说少于10%)的电子邮件.
在S3上,我设置了一个Event Notification
.它正在调用我的Lambda函数ObjectCreated (All)
.根据我的理解,这意味着,对于在S3上创建的每个新对象(即SES存储的电子邮件),都会调用Lambda函数.
Lambda函数做了几件事,但至少它在这里做了:
exports.handler = function(event, context) {
Async.mapSeries(event.Records,
function dealWithOneMail(record, callback) {
var srcKey = decodeURIComponent(record.s3.object.key.replace(/\+/g, " "));
console.log('> Working on object ' + srcKey);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我重复阵列上Records
的event
至少打印对象的名称一次.我也在我的Lambda代码的第一行中执行此操作:
console.log('> Lambda function invoked!');
Run Code Online (Sandbox Code Playgroud)
从我的日志来看,Lambda函数不是每次调用,而只是有时调用.为什么我这么想?
我今天下载了所有新的电子邮件,这些是1,245个对象.所有这些电子邮件也存储在S3上.但我只Lambda function invoked
在我的CloudWatch日志中找到了85次自动为Lambda设置的日志.
有没有人提示可能是错误甚至是我可以调试的想法?
我想以一种很好的方式有条件地管道流。我想要实现的行为如下:
if (someBoolean) {
stream = fs
.createReadStream(filepath)
.pipe(decodeStream(someOptions))
.pipe(writeStream);
} else {
stream = fs
.createReadStream(filepath)
.pipe(writeStream);
}
Run Code Online (Sandbox Code Playgroud)
所以我准备了我所有的流,如果someBoolean
是真的,我想向管道添加一个额外的流。
然后我以为我找到了detour-stream的解决方案,但不幸的是没有设法设置它。我使用了类似于gulp-if 的符号,因为这被提到作为灵感:
var detour = require('detour-stream');
stream = fs
.createReadStream(filepath)
.detour(someBoolean, decodeStream(someOptions))
.pipe(writeStream);
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这只会导致错误:
.detour(someBoolean, decodeStream(someOptions))
^
TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我试图在两个日期之间的所有几周内迭代我的Java程序(结束日期是今天).首先,我得到开始日期:
Calendar start = Calendar.getInstance();
start = data.getFirstDate(users, threads);
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.开始日期是正确的,我可以使用它.现在我迭代:
Calendar current = start;
while(current.before(Calendar.getInstance()) {
// Do something
current.add(Calendar.DATE, 7);
}
Run Code Online (Sandbox Code Playgroud)
好吧,这种作品.我从2002/8/23开始,然后是2002/8/30,然后是2002/9/7 ...... UNTIL 2002/11/30.之后的日期是2003/0/6,既不正确也不是有效日期!
我究竟做错了什么?我试过current.add(Calendar.DATE, 7)
,current.add(Calendar.WEEK_OF_YEAR, 1)
,current.add(Calendar.DAY_OF_YEAR, 7)
和其他两种方式.使用current.roll(Calendar.DATE, 7)
不起作用,因为我留在同一个月.使用GregorianCalendar
也没有效果.
任何建议将不胜感激!
谢谢朱利安
我正在使用fast-csv使用a来迭代CSV文件stream
.对于CSV文件的每一行,我想在redis中创建一个作业,我使用kue.解析一行是同步函数.整件事看起来像这样:
var csvStream = fastCsv(_config.csvOptions)
.on('data', function(data) {
var stream = this;
stream.pause();
var payload = parseRow(data, _config);
console.log(payload); // the payload is always printed to the console
var job = kue.create('csv-row', {
payload: payload
})
.save(function(err) {
if (!err) console.log('Enqueued at ' + job.id);
else console.log('Redis error ' + JSON.stringify(err));
stream.resume();
});
})
.on('end', function() {
callback(); // this ends my parsing
});
Run Code Online (Sandbox Code Playgroud)
console.log(payload);
我的CSV文件的每一行都有简单的显示,但是没有创建作业.即,回调中的输出save
都没有被打印,并且作业不在我的redis中.
我假设,因为它是CSV文件的最后一行,流已经发出end
,所以kue.create()
在进程终止之前无法执行最后一行?
有没有办法停止流, …
node.js ×2
stream ×2
amazon-s3 ×1
amazon-sns ×1
aws-lambda ×1
calendar ×1
date ×1
dayofweek ×1
java ×1
redis ×1