AWS Lambda接收AmazonMQ RabbitMQ消息[AWS Lambda教程-AWS SAM系列]

AWS Lambda可以和多种数据源做集成,几乎全部的AWS托管服务都可以方便的触发Lambda的运行,详情请看Using AWS Lambda with other services。一般就海外用户而言在AWS上用MQ触发Lambda运行的场景以AWS SQS占绝大多数,但是在中国国内我们喜欢使用Kafka、RabbitMQ、ActiveMQ等开源MQ,这时我们也可以方便的让AWS Lambda和上述的3种开源的MQ集成。其中Amazon MQ是AWS托管的MQ产品,能支持RabbitMQ和ActiveMQ。本文以Amazon MQ中的RabbitMQ为例,介绍Amazon MQ和AWS Lambda的集成。

AmazonMQ和AWS Lambda的集成,我们需要仔细的了解网络配置,在本文中我的Lamdba和RabbiMQ都放在私有子网里面,并为私有子网设置了NAT网关,允许它们通过NAT访问互联网

创建AmazonMQ RabbitMQ

提前在AWS Secrets Manager中保存RabbitMQ访问密码

这里我们直接设置username和password的值,方便后续lambda和RabbitMQ的集成有权限。

创建AmazonMQ RabbitMQ

在AmazonMQ控制台选择RabbitMQ。 只是测试使用,我们可以选择单节点即可,生产环境建议选择集群模式,提示MQ整体的性能和可用性。 我们可以自由选择RabbitMQ的实例的规格和账户密码,账户密码需要和前面保存在AWS Secrets Manager中的一致。 这里我们设置RabbitMQ的可访问性,对AWS Lambda而言RabbitMQ的private和public模式都可以正常的触发Lambda的运行。这里为了方便我们可以选择public,这样我们可以直接访问RabbitMQ的控制台。 创建后我们需要等一段时间直到RabbitMQ就绪 ... RabbitMQ就绪后我们就可以继续和AWS Lambda集成了 我们登陆RabbitMQ的控制台,并创建一个queue来接收消息并触发Lambda运行,名称我自己设置为lambda-poc-queue

集成AWS Lambda和RabbitMQ

我们需要提前找到RabbitMQ的ARN 我们需要提前找到AWS Secrets Manager的ARN

然后我们在AWS SAM中设置好事件触发源,这里我们可以填入前面知道的RabbitMQ ARN、AWS Secrets Manager ARN和Queue名称 最后我们直接发布即可,发布成功后会看到Lambda的触发源中,RabbitMQ的state: EnabledActivate trigger: Yes,这时说明RabbitMQ和lambda的集成已经成功了。

测试

我们可以直接在RabbitMQ中发送文字消息 等待片刻会发现这个消息触发了Lambda执行,Lamdba接收到了消息内容并运行了。其中data内容看起来是乱码了,实际上没问题,MQ传过来的内容是Base64编码后的 ,使用的时候Base64解码即可。

到这里全部的开发就完成了,详细的代码请看amazon-mq-rabbitmq-demo

参考

相关推荐
王道长服务器 | 亚马逊云23 分钟前
一个迁移案例:从传统 IDC 到 AWS 的真实对比
java·spring boot·git·云计算·github·dubbo·aws
世间小小鱼27 分钟前
【爬坑指南】亚马逊文件中心 AWS S3 预签名URL 前端直传
前端·云计算·aws
TG_yunshuguoji27 分钟前
亚马逊云代理商:AWS亚马逊云的独特优势与实用价值
服务器·云计算·aws
阿雄不会写代码27 分钟前
AWS strands agents 当智能体作为独立服务/容器部署时,它们无法共享进程内状态
云计算·aws
华仔啊28 分钟前
为什么 keySet() 是 HashMap 遍历的雷区?90% 的人踩过
java·后端
9号达人40 分钟前
Java 13 新特性详解与实践
java·后端·面试
用户490558160812542 分钟前
keepalived原理之持有vip是什么意思
后端
想用offer打牌44 分钟前
线程池踩坑之一:将其放在类的成员变量
后端·面试·代码规范
心月狐的流火号44 分钟前
Redis 的高性能引擎 Reactor 详解与基于 Go 手写 Redis
redis·后端
橙序员小站1 小时前
搞定系统设计题:如何设计一个支付系统?
java·后端·面试