如何在客户端应用程序中订阅AWS事件总线事件

8
如何从客户端应用程序(例如NodeJS应用程序、Angular客户端或移动客户端应用程序)订阅AWS事件总线事件?
在2020年12月,AWS营销部门通过电子邮件介绍了使用事件驱动架构的优势。但是,按照文档和教程操作时,我很快就遇到了一个问题:找不到从客户端应用程序订阅这些事件的方法。
该电子邮件中提到了以下内容:
4个关注事件驱动架构的理由
您是否想要在没有延迟和依赖性的情况下扩展和构建强大的应用程序?我们将突破事件驱动架构的基础知识,并向您展示如何入门。了解事件驱动架构如何帮助您:
- 独立地扩展和失败 - 不再有依赖项 - 敏捷开发 - 不需要自定义轮询代码 - 更轻松地进行审核 - 使用事件路由器定义策略 - 降低成本 - 停止支付持续轮询费用
令人失望的是,没有示例库可以在客户端代码中集成以订阅这些事件。谷歌搜索没有返回任何重要结果,目前仅有的node库: @aws-sdk/client-eventbridge-node 只公开了发送和销毁方法。
3个回答

9

无法直接订阅Amazon EventBridge总线,因为它不提供发布/订阅功能。要在EventBridge中处理事件,您需要创建事件规则来过滤和发送匹配的事件到目标。您可以在此列表上找到可用于EventBridge规则的所有目标: Amazon EventBridge Targets

其中一个目标可以是Amazon SNS主题,它提供发布/订阅功能,即您的客户端应用程序可以订阅该主题以自动接收相应的事件。

这可能一开始听起来很复杂,但实现严格遵循分离关注点的原则。它提供了简单的构建块--就像乐高积木一样--您可以将它们放在一起以创建真正松散耦合的架构。

这张图展示了Amazon Event Bridge的功能范围以及它如何与其他服务和应用程序进行通信。


Dennis,感谢您的回答。在营销信息中说“没有自定义轮询代码”听起来有误导性。即使使用SNS,我也无法直接订阅,因为SNS HTTP/HTTPS主题创建需要一个Web服务器URL来注册和验证。那么,对于不想进行任何轮询的客户,选项再次是使用中间Web服务器或AWS API网关(WebSocket)的Web套接字。 - MFAL
“没有自定义轮询代码”意味着在许多情况下,您不需要运行应用程序来轮询事件,因为您可以通过事件触发应用程序逻辑,例如Lambda函数。由于您具有不同的架构,此优点可能不适用于您的特定用例。目前还没有办法在移动客户端内触发和运行Lambda函数。但是,我不是移动应用程序方面的专家,可能有我不知道的其他选项。然而,对于您最初的问题的答案仍然没有改变:您无法直接订阅EventBridge总线。 - Dennis Traub
1
哦,我刚想起来有一个叫做AWS AppSync的服务。它可能正是你一直在寻找的那个拼图块,因为它是一个完全托管的服务,可以轻松创建基于websocket的订阅,支持实时更新,并将其与其他AWS服务集成:https://aws.amazon.com/appsync 你可以在这里找到实时参考架构:https://aws.amazon.com/blogs/mobile/aws-appsync-real-time-reference-architecture/ - Dennis Traub
如果您没有使用像Lambda这样的无服务器解决方案,那么您可能希望代理eventbridge-> SQS并从SQS轮询。根据我的经验,如果您有类似ECS服务的东西来轮询和处理消息,您将能够根据SQS队列的大小来扩展它,而不会使您的服务不堪重负。在过去使用SNS时,该服务没有快速扩展,如果请求堆积过多,Web服务器可能会变得奇怪并崩溃。 - Alex Bailey
@DennisTraub。是的,我认为GraphQL/AppSync听起来像最佳选择。 - MFAL

2

允许您按需订阅服务(通过诸如websocket之类的tcp连接直接将订阅消息传递到您的代码)包括:

  • AppSync - websocket
  • IOT Core - websocket,mqtt
  • SQS - 长轮询
  • Kafka

(这是我能想到的一些)

因此,对于您来说,一个简单的无服务器解决方案可能是:

事件桥——> SQS——> 您的代码

我经常使用AppSync来实现这个目的。但事件桥也很酷。


3
我想知道为什么在许多AWS文档中提到EventBridge作为发布/订阅工具,但它并不是传统意义上的发布/订阅,因为消息接收者不一定知道代理。 - reza

1
如果您想避免轮询并且不能/不想使用AWS Lambda,那么您可以反向问题,并使用规则从EventBridge在您的应用程序上调用API。
您可以在EventBridge中创建API目标: API目标

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接