使用声明 ID 删除消息

https://blueprints.launchpad.net/zaqar/+spec/delete-message-with-claim-id

使用声明 ID 删除消息意味着当用户删除消息时,消息必须已被声明。如果要删除消息,您必须同时使用消息 ID 和声明 ID。这可以提高消息的安全性。

问题描述

目前,任何知道消息 ID 的客户端,如果消息未被声明,都可以删除该消息。这可能会导致一些意想不到的问题。更好的删除消息的方式是确保消息由声明该消息的客户端删除。Amazon SQS 使用收据处理程序来删除消息[1]。Zaqar 可以使用声明 ID 和消息 ID 来删除消息。

提议的变更

添加一个新的配置项,名为 message_delete_with_claim_id,默认值为 False,这意味着它向后兼容。您可以修改此配置项来决定是否开启此功能。如果将其更改为 True,则在删除消息时必须强制携带声明 ID。如果声明 ID 无效,则无法删除消息。您必须重新声明消息,然后删除它。

..note

No matter "message_delete_with_claim_id" is True of False, admin can
always delete a message without claim_id.

API 影响

删除单个消息 DELETE: /v2/queues/test_queue/messages/{message_id}?claim_id={claim_id}

响应代码: 204

删除消息 DELETE: /v2/queues/test_queue/messages?ids={messages_ids}&claim_ids={claim_ids}

响应代码: 204

缺点

备选方案

实现

负责人

主要负责人

cdyangzhenyu <cdyangzhenyu@gmail.com>

二级分配人

gecong<ge.cong@zte.com.cn> wanghao<sxmatch1986@gmail.com>

里程碑

完成目标里程碑

stein RC3

工作项

  1. 修改消息删除代码。

  2. 添加此功能的发布说明。

  3. 更新 API 参考。

  4. 添加此功能的开发者文档。

  5. 相应地更改单元测试、功能测试和 tempest 测试。

依赖项

参考资料

[1]:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-message-identifiers.html