From 2aed426ff7d6d86c385b1d96a4ee77bd57f43925 Mon Sep 17 00:00:00 2001 From: jwkwak Date: Fri, 7 Oct 2022 14:55:30 +0900 Subject: [PATCH] =?UTF-8?q?fix=20#112=20rabbitmq=EA=B0=80=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0=EB=90=A0=EB=95=8C=EA=B9=8C=EC=A7=80=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0=20=EC=8B=9C=EB=8F=84=EB=A5=BC=20=EA=B3=84=EC=86=8D?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RabbitMqReceivers/RabbitMqReceiver.cs | 22 ++++++++++++++----- .../RabbitMqServerReceiver.cs | 6 ++--- .../RabbitMqServiceReceiver.cs | 8 +++---- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/portal/PortalSvr/RabbitMqReceivers/RabbitMqReceiver.cs b/portal/PortalSvr/RabbitMqReceivers/RabbitMqReceiver.cs index f229fccc..e7bc078b 100644 --- a/portal/PortalSvr/RabbitMqReceivers/RabbitMqReceiver.cs +++ b/portal/PortalSvr/RabbitMqReceivers/RabbitMqReceiver.cs @@ -32,7 +32,7 @@ namespace PortalSvr.RabbitMQReceivers public abstract class RabbitMQReceiver : BackgroundService { /// Rabbit MQ 연결 객체 - private IConnection m_connection; + private IConnection m_connection = null; /// Rabbit MQ 채널 객체 private IModel m_channel; /// 큐 이름 @@ -98,7 +98,18 @@ private void InitializeRabbitMQListener() }; // 연결 객체 생성 - m_connection = Factory.CreateConnection(); + while (m_connection == null) + { + try + { + m_connection = Factory.CreateConnection(); + } + catch (Exception e) + { + NNException.Log(e); + } + Thread.Sleep(1000); + } // 연결 해제 이벤트 설정 m_connection.ConnectionShutdown += (_, _) => { @@ -110,9 +121,10 @@ private void InitializeRabbitMQListener() var arguments = new Dictionary { { "x-queue-type", "quorum" }, + {"x-single-active-consumer", true} }; m_channel.QueueDeclare(queue: m_queueName, durable: true, exclusive: false, autoDelete: false, arguments: arguments); - // Exchange 설절 + // Exchange 설정 m_channel.ExchangeDeclare(exchange: m_config.ExchangeName, type: "topic"); // 모든 바인딩 키 처리 if (m_bindingKeys != null) @@ -151,7 +163,7 @@ protected override Task ExecuteAsync(CancellationToken StoppingToken) // 처리된 건인 경우 if (ResponseHandleMessage.IsProcessed) { - m_logger.LogDebug($"[Process] MQ Message Received on [{{0}}] : {{1}}, Data = {{2}}", m_queueName, ea.RoutingKey, ea.Body.ToArray().GetString()); + m_logger.LogDebug($"[Process] MQ Message Received on [{m_queueName}] : {ea.RoutingKey}, Data = {ea.Body.ToArray().GetString()}"); // 응답 연관 아이디가 존재하는 경우 var Properties = ea.BasicProperties; @@ -177,7 +189,7 @@ protected override Task ExecuteAsync(CancellationToken StoppingToken) // 처리되지 않은 건인 경우 else { - m_logger.LogDebug($"[Reject] MQ Message Received on [{{0}}] : {{1}}, Data = {{2}}", m_queueName, ea.RoutingKey, ea.Body.ToArray().GetString()); + m_logger.LogDebug($"[Reject] MQ Message Received on [{m_queueName}] : {ea.RoutingKey}, Data = {ea.Body.ToArray().GetString()}"); // 처리 거부 m_channel.BasicReject(ea.DeliveryTag, false); diff --git a/portal/PortalSvr/RabbitMqReceivers/RabbitMqServerReceiver.cs b/portal/PortalSvr/RabbitMqReceivers/RabbitMqServerReceiver.cs index 15f9cdfc..a530cf99 100644 --- a/portal/PortalSvr/RabbitMqReceivers/RabbitMqServerReceiver.cs +++ b/portal/PortalSvr/RabbitMqReceivers/RabbitMqServerReceiver.cs @@ -85,10 +85,10 @@ protected override async Task HandleMessage(string RoutingKey, b return new ResponseMqData(EnumResponseResult.Error, Resource.EC_COMMON__CANNOT_CREATE_INSTANCE, Resource.EM_COMMON__CANNOT_CREATE_INSTANCE); // 내부 시스템 API 키 정보를 가져온다. - var ResponseApiKey = await ApiKeyProvider.GetMainApiKey(); + var ApiKey = await ApiKeyProvider.GetMainApiKey(); // API 키를 가져오는데 실패한 경우 - if (ResponseApiKey == null) + if (ApiKey == null) return new ResponseMqData(EnumResponseResult.Error, Resource.EC_COMMON__NOT_FOUND, Resource.EM_COMMON__NOT_FOUND); // 서버 상태 관련인 경우 @@ -103,7 +103,7 @@ protected override async Task HandleMessage(string RoutingKey, b var Request = JsonConvert.DeserializeObject(json); // 서버 상태 수정 - var Response = await DataProvider.UpdateState(Request, ResponseApiKey.UserId, ResponseApiKey.UserName); + var Response = await DataProvider.UpdateState(Request, ApiKey.UserId, ApiKey.UserName); Result.CopyValueFrom(Response); Result.IsProcessed = true; diff --git a/portal/PortalSvr/RabbitMqReceivers/RabbitMqServiceReceiver.cs b/portal/PortalSvr/RabbitMqReceivers/RabbitMqServiceReceiver.cs index ca4e960b..76851f04 100644 --- a/portal/PortalSvr/RabbitMqReceivers/RabbitMqServiceReceiver.cs +++ b/portal/PortalSvr/RabbitMqReceivers/RabbitMqServiceReceiver.cs @@ -86,10 +86,10 @@ protected override async Task HandleMessage(string RoutingKey, b return new ResponseMqData(EnumResponseResult.Error, Resource.EC_COMMON__CANNOT_CREATE_INSTANCE, Resource.EM_COMMON__CANNOT_CREATE_INSTANCE); // 내부 시스템 API 키 정보를 가져온다. - var ResponseApiKey = await ApiKeyProvider.GetMainApiKey(); + var ApiKey = await ApiKeyProvider.GetMainApiKey(); // API 키를 가져오는데 실패한 경우 - if (ResponseApiKey == null) + if (ApiKey == null) return new ResponseMqData(EnumResponseResult.Error, Resource.EC_COMMON__NOT_FOUND, Resource.EM_COMMON__NOT_FOUND); // 서비스 상태 관련인 경우 @@ -104,7 +104,7 @@ protected override async Task HandleMessage(string RoutingKey, b var Request = JsonConvert.DeserializeObject(json); // 서버 상태 수정 - var Response = await DataProvider.UpdateState(Request, ResponseApiKey.UserId, ResponseApiKey.UserName); + var Response = await DataProvider.UpdateState(Request, ApiKey.UserId, ApiKey.UserName); Result.CopyValueFrom(Response); Result.IsProcessed = true; @@ -121,7 +121,7 @@ protected override async Task HandleMessage(string RoutingKey, b var Request = JsonConvert.DeserializeObject(json); // 서비스 HA 상태 수정 - var Response = await DataProvider.UpdateHaAction(Request, ResponseApiKey.UserId, ResponseApiKey.UserName); + var Response = await DataProvider.UpdateHaAction(Request, ApiKey.UserId, ApiKey.UserName); Result.CopyValueFrom(Response); Result.IsProcessed = true;