我有以下基础架构:
我有一个带有NodeJS + Express进程的EC2实例,该进程在端口上侦听消息(进程1)。每当进程接收到一条消息时,它将其发送到SQS队列。然后,我在同一台计算机上有另一个进程使用长轮询来读取队列(进程2)。当它在队列中找到消息时,会将数据插入位于RDS实例上的MariaDB数据库中。
(为澄清起见,消息是由用户生成的,它们将包含可包含任意信息的数据块发送到进程1正在侦听的端点)
现在,我想将读取SQS的进程(进程2)放在Lambda函数中,以便写入队列的进程和从队列读取的进程是完全独立的。问题是我不知道是否可行。
我知道Lambda函数是为响应事件而调用的,目前支持的事件是S3,SNS,SES,DynamoDB,Kinesis,Cognito,CloudWatch和Cloudformation,但不是SQS。
我当时在考虑使用SNS通知调用Lambda函数,以便每次将消息推送到队列时,都会触发SNS通知并调用Lambda函数,但是在玩了一点之后,我意识到不可能通过SQS创建SNS通知,则只能将SNS通知写入队列。
现在,我有点不知所措,因为我不知道如何继续。由于AWS服务的当前限制,我感觉无法创建此基础架构。还有另一种方式可以做我想做的事,还是我处于死胡同?
只是为了用我所做的一些研究来扩展我的问题,这个github回购展示了如何从Lambda函数读取SQS队列,但是lambda函数仅在从命令行中触发时才有效:
https://github.com/robinjmurphy/sqs-to-lambda
在自述文件中,作者提到以下内容:
更新:Lambda现在支持将SNS通知作为事件源,这使得对于SNS通知完全不需要此hack。如果您喜欢使用Lambda函数来处理SQS队列上的作业的想法,那么您可能仍然发现它很有用。
但是我认为这不能解决我的问题,SNS通知可以调用Lambda函数,但是当在SQS队列中接收到消息时,我看不到如何创建通知。
谢谢
有几种策略可用于连接点,(A)同步或运行-睡眠-运行以保持SNS,SQS,Lambda之间的数据处理流程。
策略1:有一个lambda函数听SNS和实时处理它[请注意,SQS队列可以订阅SNS主题-这将可能是日志/审计/重试操作有帮助]
策略2:假设您要获取数据源到SQS队列。您可以尝试使用2个Lambda函数[Feeder&Worker]。
给料机将是
scheduled lambda function
他们的工作是把项目从SQS(如果有的话),并推动它作为一个SNS主题(和永远继续这样做)工作者将被链接以收听SNS主题,该主题将
actual data processing
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句