我对开始使用Amazon SQS进行开发很有兴趣,也许是SimpleDB,我的问题是,是否有任何开源解决scheme模仿function,只是为了开发的目的。 我已经遇到了Eucalyptus项目( http://open.eucalyptus.com ),用于创buildEC-esque云。 我还没有取得任何成功的谷歌,我怀疑这是因为进入的成本是如此便宜,但仍然有人知道这样的事情?
这是我正在努力工作的简化scheme: http请求 – >(网关API + lambda A) – > SQS – >(lambda B ?????) – > DynamoDB 所以它应该如下图所示:来自许多http请求的数据(例如每秒500个)被我的lambda函数A放入到SQS队列中。然后另一个函数B处理队列:读取多达10个项目(定期),并使用BatchWriteItem将它们写入DynamoDB。 问题是,我不知道如何触发第二个lambda函数。 应该频繁地调用,每秒多次(或者至less每秒一次),因为我需要从队列中的所有数据尽快进入DynamoDB(这就是为什么通过调度事件调用lambda函数B( 这里描述的不是一个选项) 为什么我不想直接写入DynamoDB,没有SQS? 这对我来说完全可以避免使用SQS。 我试图用SQS解决的问题是DynamoDB限制。 在使用AWS开发工具包(SDK)将数据写入DynamoDB的过程中,甚至不用自行节制,而是将数据写入DynamoDB时处理的方式:在逐个写入logging并限制数据logging时,AWS SDK会以静默方式重试写入,导致请求处理时间从http客户端视图。 因此,我想临时存储队列中的数据,发送响应“200 OK”返回给客户端,然后通过单独的函数获得队列处理,用一个DynamoDB的BatchWriteItem调用写入多个logging(返回未处理的项目而不是自动重试的节stream)。 我甚至希望丢失一些logging,而不是增加在DynamoDB中收到和存储的logging之间的延迟 UPD:如果有人感兴趣,我已经find了如何使aws-sdk在节stream的情况下跳过自动重试:有一个特殊的参数maxRetries 。 无论如何,要使用Kinesis如下所示
我不明白我什么时候会使用SNS和SQS,为什么他们总是耦合在一起?
我知道可以使用多个线程来使用SQS队列。 我想保证每个消息将被消耗一次。 我知道可以改变消息的可见性超时,例如等于我的处理时间。 如果我的进程花费比可见性超时更多的时间(例如,连接速度较慢),则其他线程可能会使用相同的消息。 什么是最好的方法来保证消息将被处理一次?