@yolo-croket-dev/core 1.7.28 → 1.7.30-slowquery.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/interceptors/rpc.interceptor.js +21 -19
- package/package.json +1 -1
|
@@ -255,13 +255,13 @@ let RPCInterceptor = class RPCInterceptor {
|
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
257
|
const sendMessage = Buffer.from(JSON.stringify(abstractAmqpHandlerData));
|
|
258
|
-
if (!isAck) {
|
|
258
|
+
if (!isAck && !execInterceptor.isMessageAck) {
|
|
259
259
|
channel.sendToQueue(message.properties.replyTo, sendMessage, { correlationId: message.properties.correlationId });
|
|
260
260
|
}
|
|
261
261
|
const messageContent = message.content.toString();
|
|
262
262
|
/** 파일 객체 처리 */
|
|
263
263
|
(0, functions_1.reWriteFileValue)((_a = messageContent === null || messageContent === void 0 ? void 0 : messageContent.data) === null || _a === void 0 ? void 0 : _a.file);
|
|
264
|
-
if (!noAck && !isAck) {
|
|
264
|
+
if (!noAck && !isAck && !execInterceptor.isMessageAck) {
|
|
265
265
|
channel.ack(message);
|
|
266
266
|
execInterceptor.isMessageAck = true;
|
|
267
267
|
}
|
|
@@ -306,27 +306,13 @@ let RPCInterceptor = class RPCInterceptor {
|
|
|
306
306
|
abortController.abort();
|
|
307
307
|
return (0, rxjs_1.throwError)(() => new exceptions_1.InternalServerError('TIMEOUT_ERROR', this.DEFAULT_TIMEOUT_MESSAGE));
|
|
308
308
|
},
|
|
309
|
-
}), (0, operators_1.tap)({
|
|
310
|
-
next: async (val) => {
|
|
311
|
-
val.isError = false;
|
|
312
|
-
/** 만약 응답데이터중 isRequeue가 true라면, 다시 재처리 하도록 함 */
|
|
313
|
-
if (val.data && val.data.isRequeue) {
|
|
314
|
-
channel.nack(message, false, true);
|
|
315
|
-
execInterceptor.isMessageAck = true;
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
if (!noAck) {
|
|
319
|
-
execInterceptor.isMessageAck = true;
|
|
320
|
-
channel.ack(message);
|
|
321
|
-
}
|
|
322
|
-
},
|
|
323
|
-
error: localErrorProcessor,
|
|
324
309
|
}),
|
|
325
310
|
// eslint-disable-next-line consistent-return
|
|
326
311
|
(0, operators_1.catchError)(async (err) => {
|
|
327
312
|
const isNackMessage = !execInterceptor.isMessageAck;
|
|
328
313
|
// timeout 에러 처리
|
|
329
|
-
const isTimeoutError = err instanceof Error
|
|
314
|
+
const isTimeoutError = err instanceof Error
|
|
315
|
+
&& (err.name === 'TimeoutError' || (err.message === this.DEFAULT_TIMEOUT_MESSAGE) || err.message === 'TIMEOUT_ERROR');
|
|
330
316
|
if (isTimeoutError) {
|
|
331
317
|
msaLogger.error(`[타임 아웃] 메시지 감지, ${isNackMessage ? '재전달' : '재전달하지 않음'}처리`, { traceId: execInterceptor.traceId }, {
|
|
332
318
|
error: {
|
|
@@ -346,16 +332,32 @@ let RPCInterceptor = class RPCInterceptor {
|
|
|
346
332
|
stack: err.stack,
|
|
347
333
|
name: err.name,
|
|
348
334
|
response: err.response,
|
|
335
|
+
isNackMessage,
|
|
349
336
|
},
|
|
350
337
|
messagePattern: method,
|
|
351
338
|
});
|
|
352
339
|
}
|
|
353
|
-
if (
|
|
340
|
+
if (isNackMessage) {
|
|
354
341
|
channel.nack(message, false, true);
|
|
355
342
|
execInterceptor.isMessageAck = true;
|
|
356
343
|
message.properties.replyTo = undefined; /** replyTo가 존재하면 sendToQueue가 호출되므로, 삭제해주기 */
|
|
357
344
|
}
|
|
358
345
|
return new rxjs_1.Observable();
|
|
346
|
+
}), (0, operators_1.tap)({
|
|
347
|
+
next: async (val) => {
|
|
348
|
+
val.isError = false;
|
|
349
|
+
/** 만약 응답데이터중 isRequeue가 true라면, 다시 재처리 하도록 함 */
|
|
350
|
+
if (val.data && val.data.isRequeue) {
|
|
351
|
+
channel.nack(message, false, true);
|
|
352
|
+
execInterceptor.isMessageAck = true;
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
if (!noAck) {
|
|
356
|
+
execInterceptor.isMessageAck = true;
|
|
357
|
+
channel.ack(message);
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
error: localErrorProcessor,
|
|
359
361
|
}), (0, operators_1.finalize)(() => {
|
|
360
362
|
this.gracefulShutdownService.popActiveInterceptors(execInterceptor);
|
|
361
363
|
abortController.abort();
|