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

使用SQS模拟SNS中的消息持久性

濮君植
2023-03-14

我们正在评估SNS以满足集成多个应用程序的消息传递需求。我们有一个生产者,它将消息发布到SNS上的多个主题。每个主题有2-5个订阅者。如果订阅者失败(为了维护而关闭),我对每个消费者使用SQS队列的推荐策略有几个问题

  1. 是否可以将SNS配置为仅在向订阅者传递消息失败的情况下推送到SQS?转储SQS队列中的所有消息会给使用者在重新启动时分析队列中的所有消息带来问题

欢迎就如何处理订户故障提出任何建议。

谢谢!

共有1个答案

周睿范
2023-03-14

不,不可能“配置SNS以仅在发生故障时推送到SQS”。

您可以配置Amazon SNS重试策略,而不是在失败后尝试恢复消息。

通过为HTTP/HTTPSendpoint设置Amazon SNS交付重试策略:

您可以使用传递策略不仅控制重试总数,还可以控制每次重试之间的时间延迟。您最多可以指定分布在四个离散阶段中的100次总重试次数。系统中消息的最长生存期为一小时。交付政策不能延长这一小时的限制。

所以,只要目的地在一小时内恢复在线,你就不必担心。

如果可能脱机超过一个小时,您需要找到一种方法来存储和“重播”消息,可能需要检查CloudWatch日志。

或者,还有一个想法...

最初推送到SQS。有一个由SQS触发的AWS Lambda函数。Lambda函数可以执行通常由SNS执行的“推送”。如果失败,标准SQS隐形过程将稍后重试,最终进入死信队列。

 类似资料:
  • 我正在从SNS主题向SQS发送消息。当我在客户机上检查SQS消息的正文时,整个消息元数据都是在SQS正文中发送的。 这有点烦人,因为我不得不在另一端拆分消息体。速度在这个应用程序中是非常重要的,所以我想消除这一点。有没有办法只从SNS发送消息而忽略其余的元数据? 谢谢,本

  • 我想用亚马逊SNS向2000万台设备发送时间紧迫的移动推送通知。每个话题最多可以有10000个设备,我最多可以创建3000个话题。使用Amazon PHP SDK意味着每1秒发送2000个API调用--总共33分钟。这对时间紧迫的消息没有好处。 我已经创建了一个SQS队列并将其订阅到SNS主题。当我将推送消息发送到SQS队列时,它不会被传递--它仍然留在队列中。

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

  • 我创建了一个SNS主题,通过cli发布来自Cloudformation的所有信息。然而,当我检查队列时,它没有接收任何SNS消息。我通过订阅我的电子邮件来验证SNS是否正常工作,所以问题似乎出在队列和SNS之间的连接上。然而,我没有发现我的语法有任何问题。一、 据我所知,他们严格遵循了亚马逊的文档。 猛击:

  • 我有一个SQS队列订阅了一个SNS主题。当我将消息发布到主题并随后从队列中接收到它时,消息体包含我发布的消息,这些消息包装在SNS添加的一些元数据中,如“Amazon SNS->SQS消息体”所示。与这个问题的海报不同,我想要元数据,因为它允许我生成一些延迟度量。 然而,我在亚马逊的文档中或可谷歌网站上的其他地方都找不到任何关于元数据含义的确切解释。在向Amazon SQS队列发送Amazon S

  • 我通过自定义管理的KMS密钥有一个加密的SQS队列和SNS主题。目前,我正在使用下面链接中所述的类似类型的SQS策略,它可以正常工作SQS策略 但是如果我使用下面的SQS策略,它就不起作用了。出于安全原因,我不想将主体设置为“*”。有人能解释一下为什么会发生这种情况吗