Skip to content

Commit 954a893

Browse files
Uroš MaroltMisha Savelyev
authored andcommitted
handle all sqs throttling errors
1 parent 90e4b7c commit 954a893

File tree

1 file changed

+48
-5
lines changed

1 file changed

+48
-5
lines changed

services/libs/sqs/src/client.ts

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
SendMessageRequest,
1212
SendMessageResult,
1313
} from '@aws-sdk/client-sqs'
14-
import { IS_DEV_ENV, IS_STAGING_ENV } from '@crowd/common'
14+
import { IS_DEV_ENV, IS_STAGING_ENV, timeout } from '@crowd/common'
1515
import { getServiceChildLogger } from '@crowd/logging'
1616
import { ISqsClientConfig, SqsClient, SqsMessage } from './types'
1717

@@ -63,7 +63,11 @@ export const receiveMessage = async (
6363

6464
return []
6565
} catch (err) {
66-
if (err.message === 'We encountered an internal error. Please try again.') {
66+
if (
67+
err.message === 'We encountered an internal error. Please try again.' ||
68+
err.message === 'Request is throttled.' ||
69+
err.message === 'Queue Throttled'
70+
) {
6771
return []
6872
}
6973

@@ -74,20 +78,59 @@ export const receiveMessage = async (
7478
export const deleteMessage = async (
7579
client: SqsClient,
7680
params: DeleteMessageRequest,
81+
retry = 0,
7782
): Promise<void> => {
78-
await client.send(new DeleteMessageCommand(params))
83+
try {
84+
await client.send(new DeleteMessageCommand(params))
85+
} catch (err) {
86+
if (
87+
(err.message === 'Request is throttled.' || err.message === 'Queue Throttled') &&
88+
retry < 5
89+
) {
90+
await timeout(1000)
91+
return await deleteMessage(client, params, retry + 1)
92+
}
93+
94+
throw err
95+
}
7996
}
8097

8198
export const sendMessage = async (
8299
client: SqsClient,
83100
params: SendMessageRequest,
101+
retry = 0,
84102
): Promise<SendMessageResult> => {
85-
return client.send(new SendMessageCommand(params))
103+
try {
104+
return client.send(new SendMessageCommand(params))
105+
} catch (err) {
106+
if (
107+
(err.message === 'Request is throttled.' || err.message === 'Queue Throttled') &&
108+
retry < 5
109+
) {
110+
await timeout(1000)
111+
return await sendMessage(client, params, retry + 1)
112+
}
113+
114+
throw err
115+
}
86116
}
87117

88118
export const sendMessagesBulk = async (
89119
client: SqsClient,
90120
params: SendMessageBatchRequest,
121+
retry = 0,
91122
): Promise<SendMessageBatchCommandOutput> => {
92-
return client.send(new SendMessageBatchCommand(params))
123+
try {
124+
return client.send(new SendMessageBatchCommand(params))
125+
} catch (err) {
126+
if (
127+
(err.message === 'Request is throttled.' || err.message === 'Queue Throttled') &&
128+
retry < 5
129+
) {
130+
await timeout(1000)
131+
return await sendMessagesBulk(client, params, retry + 1)
132+
}
133+
134+
throw err
135+
}
93136
}

0 commit comments

Comments
 (0)