fix(fifo): ContentBasedDeduplication + dedup window survives delete (AWS semantics)

- ContentBasedDeduplication=true: dedupId computed from body SHA-256 when not provided
- do NOT drop dedupId on message delete: AWS keeps the 5-minute window regardless
  (previously re-send after delete delivered the message again)
- utils: GetSHA256Hash
This commit is contained in:
2026-10-10 17:30:02 +03:00
parent 9f1242aca3
commit ccd070200a
5 changed files with 30 additions and 7 deletions
+7
View File
@@ -92,6 +92,7 @@ func SendMessageV1(req *http.Request) (int, interfaces.AbstractResponseBody) {
maxMessageSize := queue.MaximumMessageSize
currentMsgCount := queue.LiveCount()
queueIsFIFO := queue.IsFIFO
contentBasedDedup := queue.ContentBasedDeduplication
delaySecs := queue.DelaySeconds
// FIFO-очередь БЕЗ MessageGroupId — ошибка: AWS требует GroupId для каждой
@@ -100,6 +101,12 @@ func SendMessageV1(req *http.Request) (int, interfaces.AbstractResponseBody) {
if queueIsFIFO && messageGroupID == "" {
return utils.CreateErrorResponseV1("MissingParameter", true)
}
// ContentBasedDeduplication: если MessageDeduplicationId не передан, AWS сам
// вычисляет его из тела сообщения (SHA-256). Без этого включённый флаг
// ничего не делал бы и FIFO-дедупликация не работала.
if queueIsFIFO && contentBasedDedup && messageDeduplicationID == "" {
messageDeduplicationID = utils.GetSHA256Hash(messageBody)
}
if maxMessageSize > 0 && len(messageBody) > maxMessageSize {
return utils.CreateErrorResponseV1("MessageTooBig", true)