假设我已经建立了一个有3个订阅者的AWS SNS。我想知道所有订阅者何时接收/处理该消息,以便将该消息标记为已由所有3个订阅者处理,并生成一些度量。有办法做到这一点吗?
您可以将SNS主题的交付状态记录到CloudWatch,但仅限于某些类型的消息(AWS无法可靠地知道是否收到了某些消息,例如短信或电子邮件(。
您可以记录的消息类型有:
- HTTP
- Lambda
- SQS
- 自定义应用程序(必须配置为告知AWS已收到消息(
要在SNS中设置日志记录:
- 在SNS控制台中,单击";编辑主题">
- 展开";传送状态记录">
- 然后,您可以配置要登录的协议以及登录所需的权限
一旦您登录到CloudWatch,就可以从中提取指标。
如果您需要在订阅者收到消息时得到通知,您可以在cloudwatch中设置一个订阅过滤器,将相关的日志事件发送到lambda函数,在该函数中您将实现自定义逻辑来适当地通知您。
我指的是消费者成功处理
通常你的消费者必须以某种方式表明这一点。这是特定于用例的,因此很难推测确切的解决方案。
但为了举一个例子,一种流行的模式是请求-响应消息传递模式。在这里,您的消费者将使用一个SQS队列来发布消息处理的结果。生产者会拉取队列来获取这些消息,然后知道哪些消息被正确处理,哪些消息没有被正确处理。