@@ -11,7 +11,7 @@ import {
11
11
SendMessageRequest ,
12
12
SendMessageResult ,
13
13
} 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'
15
15
import { getServiceChildLogger } from '@crowd/logging'
16
16
import { ISqsClientConfig , SqsClient , SqsMessage } from './types'
17
17
@@ -63,7 +63,11 @@ export const receiveMessage = async (
63
63
64
64
return [ ]
65
65
} 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
+ ) {
67
71
return [ ]
68
72
}
69
73
@@ -74,20 +78,59 @@ export const receiveMessage = async (
74
78
export const deleteMessage = async (
75
79
client : SqsClient ,
76
80
params : DeleteMessageRequest ,
81
+ retry = 0 ,
77
82
) : 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
+ }
79
96
}
80
97
81
98
export const sendMessage = async (
82
99
client : SqsClient ,
83
100
params : SendMessageRequest ,
101
+ retry = 0 ,
84
102
) : 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
+ }
86
116
}
87
117
88
118
export const sendMessagesBulk = async (
89
119
client : SqsClient ,
90
120
params : SendMessageBatchRequest ,
121
+ retry = 0 ,
91
122
) : 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
+ }
93
136
}
0 commit comments