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

Amazon web services 如何在客户端应用程序中订阅AWS事件总线事件,amazon-web-services,aws-sdk,event-bus,aws-event-bridge,Amazon Web Services,Aws Sdk,Event Bus,Aws Event Bridge,如何从客户端应用程序订阅AWS事件总线事件,例如:NodeJS应用程序、Angular客户端或移动客户端应用程序 2020年12月,AWS Marketing的一封电子邮件介绍了使用事件驱动架构的优势。在阅读了文档和教程之后,很快我就陷入了无法从客户端应用程序订阅此事件的困境 该电子邮件声明: 4个关注事件驱动体系结构的原因 您是否希望在没有延迟和依赖性的情况下扩展和构建健壮的应用程序?我们将详细介绍事件驱动体系结构的基础知识、它们的工作原理,并向您展示如何开始。了解事件驱动体系结构如何帮助您:

如何从客户端应用程序订阅AWS事件总线事件,例如:NodeJS应用程序、Angular客户端或移动客户端应用程序

2020年12月,AWS Marketing的一封电子邮件介绍了使用事件驱动架构的优势。在阅读了文档和教程之后,很快我就陷入了无法从客户端应用程序订阅此事件的困境

该电子邮件声明:

4个关注事件驱动体系结构的原因

您是否希望在没有延迟和依赖性的情况下扩展和构建健壮的应用程序?我们将详细介绍事件驱动体系结构的基础知识、它们的工作原理,并向您展示如何开始。了解事件驱动体系结构如何帮助您:

  • 独立扩展和故障-不再依赖
  • 敏捷开发—无需定制轮询代码
  • 轻松审核-使用事件路由器定义策略
  • 削减成本-停止为连续投票付费

令人失望的是,没有库集成到客户端代码中以订阅这些事件的示例。谷歌搜索不会返回任何重要结果,当前唯一的节点库:@aws sdk/client eventbridge node只公开发送和销毁方法。

无法直接订阅Amazon eventbridge总线,因为它不提供发布/订阅功能。为了处理EventBridge中的事件,您需要筛选匹配事件并将其发送到目标。您可以在此列表中找到EventBridge规则可用的所有目标:

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

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


显示Amazon事件桥范围内的功能及其与其他服务和应用程序的通信方式。

允许您按需订阅的服务(通过tcp连接(如websocket)直接向代码发送订阅的消息)包括:

  • AppSync-websocket
  • 物联网核心-websocket,mqtt
  • SQS-长投票
  • 卡夫卡
(从我的头顶)

因此,一个简单的无服务器解决方案可以是:

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


为此,我经常使用AppSync。但eventbridge也很酷。

丹尼斯,谢谢你的回答。然后,在营销信息中说,“没有定制的投票代码”听起来有误导性。即使使用SNS,我也不能直接订阅,因为SNS HTTP/HTTPS主题创建需要一个web服务器URL来注册和验证。然后,对于不想进行任何轮询的客户端,选择使用中间web服务器或AWS api网关(web套接字)的web套接字。“无自定义轮询代码”意味着在许多情况下,您不需要对事件进行正在运行的应用程序轮询,因为您可以让事件按需触发应用程序逻辑,例如,Lambda函数。这一好处可能不适用于您的特定用例,因为您有不同的体系结构。到目前为止,还没有办法在移动客户端中触发和运行Lambda函数。然而,我不是移动应用的专家,可能有一个我不知道的不同选择。不过,您最初问题的答案没有改变:您不能直接订阅en EventBridge bus。哦,我刚刚记得有一个名为AWS AppSync的服务。这可能正是您一直在寻找的难题的一部分,因为它是一个完全管理的服务,可以轻松创建基于websocket的订阅,支持实时更新并将其与其他AWS服务集成:您可以在此处找到实时参考体系结构:进一步,如果您没有使用像Lambda这样的无服务器解决方案,您可能希望代理eventbridge->SQS并从SQS进行轮询。根据我的经验,如果您有类似ECS的服务来轮询和处理消息,那么您将能够根据SQS队列的大小进行扩展,而不会让您的服务不知所措。当我在过去使用SNS时,服务的扩展速度不够快,如果有太多的请求堆积起来,web服务器可能会变得不正常并崩溃。我想知道为什么在很多AWS文档中提到EventBridge是一种发布/订阅工具,但它在传统意义上并不是真正的发布/订阅,因为消息接收者不一定知道代理。