当前位置: 首页 > 知识库问答 >
问题:

多个SQS队列与1个SNS主题

谢志文
2023-03-14

我们今天正在就最佳解决方案进行辩论,但双方都没有达成协议

我们有一种吸收“信息”的产品。每次我们得到一个新的消息,我们需要将这些数据发送到3个服务进行处理。

服务#1要求数据采用特殊格式。为此,我们将数据放入服务从中读取的SQS中。

服务#2读取消息字段:[a,b,c]并以protofuf格式发送。

服务#3读取消息字段:[a,b,c,d,e],也是protobuf。

编写服务#2的人不想这样做,因为他不想获得额外的数据,而这些数据将被忽略。

编写服务#3的人认为,当服务#2可以简单地读取protobuf#3并忽略不需要的字段时,系统将protobuf发送到两个单独的SQS队列而不是一个SNS主题是浪费资源。

从架构的角度来看,谁是正确的?

共有1个答案

羊柏
2023-03-14

当您想要“通知”其他服务某个事件时使用SNS--特别是如果有多个服务可能对该事件感兴趣。

整个基于格式的区分看起来像是一种人为的构造,使得使用SQS成为必要。SQS最适合点对点通信。

从一个服务发布到2-3个位置会打开您的服务,直到原子性&可靠性问题(发布到SQS之后,而发布到SNS之前,发布服务崩溃会发生什么?)。有一个单一的系统来放置信息,使这些问题更容易解决。

最终,它归结为您的系统需要什么。如果由我来决定,我会更改所有的下游服务以通过SNS获得通知(所有这些服务都有一致的格式)。

 类似资料:
  • 是否有一种方法可以使用AWS CLI列出特定SQS队列订阅的所有AWS SNS主题? 我已经知道如何看到一个SNS主题上的订阅者列表,但这只有在我知道SNS主题的名称时才起作用。在这种情况下,我只知道SQS队列的名称。 我在网上搜索什么也找不到。

  • 我试图用SQS FIFO队列探索SNS FIFO主题,这就是我刚才尝试的。我创建了SNS FIFO主题和SQS FIFO队列,并将FIFO队列订阅到FIFO主题。根据文档,对于上述设置,每当我们将消息发布到SNS FIFO队列时,它都应该将该消息扇出到SQS队列,但它没有发生。我能够获得PublishResult#getMessageId()表示发布部分正在成功进行,但队列中没有任何消息。由于SN

  • 我正在使用他们的SQS队列服务为Amazon SES设置反弹、投诉和送货通知。 文档建议在轮询多个SQS队列时,在多个线程上进行轮询。使用长轮询时尤其如此,因为长轮询一个线程上的多个队列可能会导致轮询队列延迟来自不同队列的新消息。 因此,如果我想在我的ASP.NET MVC应用程序中轮询3个SQS队列,我是否应该像下面这样生成裸体线程: 或者是否有更好的方法来实现这一点,因为这是一个长时间运行的进

  • 我知道可以使用多个线程使用SQS队列。我想保证每封邮件都会被消费一次。我知道可以更改消息的可见性超时,例如,等于我的处理时间。如果我的进程花费的时间超过可见性超时时间(例如连接速度慢),则其他线程可以使用相同的消息。 保证消息只处理一次的最佳方法是什么?

  • 我试图使用他们文档中提到的masstransit配置将SNS主题订阅到SQS队列。消息已发布,但不会出现在SQS队列中。SQS队列名称:“测试”,SNS主题名称:“kbbico手动替换”。

  • 如何在AWS CloudFormation中创建Amazon SQS队列并订阅Amazon SNS主题? SNS主题名=T1 SQS队列名称=Q1 我需要一个JSON或YAML格式的模板 请帮帮我。