【问题标题】:How to handle "resend" email in SNS and SQS如何在 SNS 和 SQS 中处理“重新发送”电子邮件
【发布时间】:2021-04-20 10:24:21
【问题描述】:

我有一个名为 onboard-user 的 SNS 主题。很多微服务都订阅了这个话题

例如:

Emai 微服务 - 发送邮件

系统偏好微服务 - 设置默认值

这些微服务中有一个订阅onboard-user SNS 主题的队列。

现在,如果需要重新发送给用户的电子邮件,应该如何处理? onboard-user 在这种情况下不应收到新消息,因为它有其自身的目的,我们不希望所有监听它的微服务都收到通知。

为发送电子邮件设置一个备用 SNS 主题听起来不是一个好主意,而且有点矫枉过正。正确的处理方法是什么?

【问题讨论】:

    标签: amazon-sqs serverless-framework amazon-sns serverless aws-serverless


    【解决方案1】:

    为什么需要重新发送电子邮件?由于临时错误或由于最终用户启动的某些业务逻辑?解决方案取决于问题。我认为,如果您检测到消息需要是最新消息的情况,您可以:(A)维护单独的重新发送电子邮件 SQS 队列或(B)在现有电子邮件队列中放置一条新消息,其中包含一个表明这是重新发送。

    由于 SQS 相当便宜,我可以倾向于 (A)。

    【讨论】:

    • 目前,队列基本上只是订阅了 SNS 主题,所以目前还没有推送到队列中。所以如果我目前理解你,它应该是一个单独的“重新发送”队列和将消息推送到队列的逻辑。那正确吗?选项 B 并不适合我们,因为我们无法将“重新发送”消息放入电子邮件队列订阅的 SNS 主题。
    • 重发邮件是终端用户@Andrew White发起的业务逻辑
    • “所以,如果我现在理解你的话”——你明白了。 “无法将'重新发送'消息发送到 SNS 主题”- 不,但您仍然可以通过 SQS API 将消息直接推送到现有队列。队列不限于单个消息源。
    • 感谢您的回复。这听起来可行,但我有点担心,因为这会在触发重新发送的微服务和拥有队列的电子邮件微服务之间产生某种耦合
    【解决方案2】:

    如果我的理解是正确的,你有一个 SNS 主题来做多个处理,这就是为什么多个微服务正在监听它。请指正,如果不正确。 如果是这种情况,更好的选择是: 一个。隔离电子邮件处理 - 为电子邮件目的保留一个单独的 SNS 主题,例如'inform-user' 并将其用于重试 湾。如果您不能隔离,那么上述场景中的唯一选择是在消息本身中包含“状态”。这意味着在消息中有一个属性来指示它用于“重试”,然后监听器微服务应该相应地处理。

    【讨论】:

    • 它根本没有回答问题。
    猜你喜欢
    • 2016-11-15
    • 2016-10-31
    • 2018-03-31
    • 1970-01-01
    • 2019-12-14
    • 2017-07-13
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多