我有以下基础设施:
我有一个带有NodeJS Express进程的EC2实例在端口上侦听消息(进程1) . 每次进程收到消息时,都会将其发送到SQS队列 . 然后我在同一台机器上有另一个进程使用长轮询读取队列(进程2) . 当它在队列中找到消息时,它会将数据插入位于RDS实例上的MariaDB数据库中 .
(只是为了澄清,消息是由用户生成的,他们发送一大块数据,其中包含任意信息到进程1正在侦听的 endpoints )
现在我想将读取SQS(进程2)的进程放在Lambda函数中,以便写入队列的进程和从队列中读取的进程完全独立 . 问题是我不知道这是否可行 .
我知道Lambda函数是为响应事件而调用的,目前支持的事件是S3,SNS,SES,DynamoDB,Kinesis,Cognito,CloudWatch和Cloudformation,但是 NOT SQS .
我正在考虑使用SNS通知来调用Lambda函数,以便每次将消息推送到队列时,都会触发SNS通知并调用Lambda函数,但在使用它后,我意识到这是不可能的从SQS创建SNS通知,只能将SNS通知写入队列 .
现在我有点卡住,因为我不知道如何继续 . 由于AWS服务的当前限制,我觉得无法创建此基础结构 . 还有另一种方法可以做我想做的事情,还是我处于死胡同?
只是为了通过我做过的一些研究来扩展我的问题,这个github repo展示了如何从Lambda函数读取SQS队列 but lambda函数只有在从命令行触发时才起作用:
在自述文件中,作者提到了以下内容:
更新:Lambda现在支持SNS通知作为事件源,这使得这个hack完全不需要SNS通知 . 如果您喜欢使用Lambda函数处理SQS队列上的作业,您可能仍会发现它很有用 .
但我认为这并不能解决我的问题,SNS通知可以调用Lambda函数,但是当我在SQS队列中收到消息时,我看不出如何创建通知 .
谢谢