@yolo-croket-dev/core 1.7.28-slowquery.0 → 1.7.29
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 +37 -30
- package/package.json +1 -1
|
@@ -296,61 +296,68 @@ let RPCInterceptor = class RPCInterceptor {
|
|
|
296
296
|
.pipe((0, operators_1.timeout)({
|
|
297
297
|
each: this.DEFAULT_TIMEOUT,
|
|
298
298
|
with: () => {
|
|
299
|
-
msaLogger.error('RPCInterceptor timeout 발생', { traceId: execInterceptor.traceId }, {
|
|
299
|
+
msaLogger.error('RPCInterceptor timeout 발생', { traceId: execInterceptor.traceId }, {
|
|
300
|
+
message: this.DEFAULT_TIMEOUT_MESSAGE,
|
|
301
|
+
messagePattern: method,
|
|
302
|
+
durationMs: Date.now() - now,
|
|
303
|
+
reDeliveryCount,
|
|
304
|
+
staticRetryCount,
|
|
305
|
+
});
|
|
300
306
|
abortController.abort();
|
|
301
307
|
return (0, rxjs_1.throwError)(() => new exceptions_1.InternalServerError('TIMEOUT_ERROR', this.DEFAULT_TIMEOUT_MESSAGE));
|
|
302
308
|
},
|
|
303
|
-
}), (0, operators_1.tap)({
|
|
304
|
-
next: async (val) => {
|
|
305
|
-
val.isError = false;
|
|
306
|
-
/** 만약 응답데이터중 isRequeue가 true라면, 다시 재처리 하도록 함 */
|
|
307
|
-
if (val.data && val.data.isRequeue) {
|
|
308
|
-
channel.nack(message, false, true);
|
|
309
|
-
execInterceptor.isMessageAck = true;
|
|
310
|
-
return;
|
|
311
|
-
}
|
|
312
|
-
if (!noAck) {
|
|
313
|
-
execInterceptor.isMessageAck = true;
|
|
314
|
-
channel.ack(message);
|
|
315
|
-
}
|
|
316
|
-
},
|
|
317
|
-
error: localErrorProcessor,
|
|
318
309
|
}),
|
|
319
310
|
// eslint-disable-next-line consistent-return
|
|
320
311
|
(0, operators_1.catchError)(async (err) => {
|
|
312
|
+
const isNackMessage = !execInterceptor.isMessageAck;
|
|
321
313
|
// timeout 에러 처리
|
|
322
|
-
const isTimeoutError = err instanceof Error
|
|
323
|
-
|
|
324
|
-
console.log('err.name: ', err.name);
|
|
325
|
-
console.log('err.message: ', err.message, this.DEFAULT_TIMEOUT_MESSAGE);
|
|
314
|
+
const isTimeoutError = err instanceof Error
|
|
315
|
+
&& (err.name === 'TimeoutError' || (err.message === this.DEFAULT_TIMEOUT_MESSAGE) || err.message === 'TIMEOUT_ERROR');
|
|
326
316
|
if (isTimeoutError) {
|
|
327
|
-
msaLogger.error(
|
|
317
|
+
msaLogger.error(`[타임 아웃] 메시지 감지, ${isNackMessage ? '재전달' : '재전달하지 않음'}처리`, { traceId: execInterceptor.traceId }, {
|
|
328
318
|
error: {
|
|
329
319
|
message: err.message,
|
|
330
320
|
stack: err.stack,
|
|
331
321
|
name: err.name,
|
|
332
322
|
response: err.response,
|
|
323
|
+
isNackMessage,
|
|
333
324
|
},
|
|
325
|
+
messagePattern: method,
|
|
334
326
|
});
|
|
335
|
-
if (!execInterceptor.isMessageAck) {
|
|
336
|
-
channel.nack(message, false, true);
|
|
337
|
-
execInterceptor.isMessageAck = true;
|
|
338
|
-
message.properties.replyTo = undefined; /** replyTo가 존재하면 sendToQueue가 호출되므로, 삭제해주기 */
|
|
339
|
-
msaLogger.debug('TimeoutError occurred, message requeued called', { traceId: execInterceptor.traceId });
|
|
340
|
-
return new rxjs_1.Observable();
|
|
341
|
-
}
|
|
342
327
|
}
|
|
343
328
|
else {
|
|
344
|
-
msaLogger.error(
|
|
329
|
+
msaLogger.error(`에러 응답 전송 처리, ${isNackMessage ? '재전달' : '재전달하지 않음'}처리`, { traceId: execInterceptor.traceId }, {
|
|
345
330
|
error: {
|
|
346
331
|
message: err.message,
|
|
347
332
|
stack: err.stack,
|
|
348
333
|
name: err.name,
|
|
349
334
|
response: err.response,
|
|
335
|
+
isNackMessage,
|
|
350
336
|
},
|
|
337
|
+
messagePattern: method,
|
|
351
338
|
});
|
|
352
|
-
return new rxjs_1.Observable();
|
|
353
339
|
}
|
|
340
|
+
if (isNackMessage) {
|
|
341
|
+
channel.nack(message, false, true);
|
|
342
|
+
execInterceptor.isMessageAck = true;
|
|
343
|
+
message.properties.replyTo = undefined; /** replyTo가 존재하면 sendToQueue가 호출되므로, 삭제해주기 */
|
|
344
|
+
}
|
|
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,
|
|
354
361
|
}), (0, operators_1.finalize)(() => {
|
|
355
362
|
this.gracefulShutdownService.popActiveInterceptors(execInterceptor);
|
|
356
363
|
abortController.abort();
|