Skip to content

psh9508/NolowaNetwork

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NolowaNetwork

다양한 네트워크를 한개의 라이브러리에서 관리할 수 있도록 설계 함

RabbitMQ

메세지 큐 시스템으로 어플리케이션간에 데이터를 비동기적으로 안전하게 전달할 수 있도록 도와줌

추가 방법

AutofacContainerBuilder()를 이용해서 추가한다.

var containerBuilder = new ContainerBuilder();
new RabbitMQModule().RegisterModule(containerBuilder);
new RabbitMQModule().SetConfiguration(containerBuilder);

RegisterModule()을 호출하면 내부적으론 RabbitMQ 구동에 필요한 모든 종속성을 등록한다.

Configuration

RabbitMQ를 사용하기 위해서는 new RabbitMQModule().SetConfiguration()을 이용해 설정 값을 전달해줘야하는데 형식은 반드시 아래와 같은 형식으로 지정되어야 한다. 내부에선 MSIConfiguration (참고 .NET의 구성)을 사용해서 받은 설정 값을 사용한다.

{
  "Network": {
    "RabbitMQ" {
      "ServerName": "server:1",       // 현재 서버의 이름
      "VirtualHostName": "/",         // 호스트 이름
      "ExchangeName": "Nolowa.topic", // 교환기 이름
      "Address": "localhost",         // 엔드포인트 주소
      "Port" = 6672,                  // 접속 포트
      "UserName" = "admin",           // 접속 아이디
      "Password" = "admin",           // 접속 비밀번호
    }
  }
}

핵심 모듈

  • RabbitNetworkClient

    Connect(), Send<T>(), Receive()과 같은 실제로 RabbitMQ에 종속된 코드가 있다.

  • MessageMaker

    RabbitMQ가 메시지를 보낼 때 필요한 데이터 모델을 만들어주는 객체. 기본적으로는 메시지를 보내는 서버, 메시지를 받는 서버 등의 RabbitMQ 메시지의 필수 적인 요소를 채워주는 역할을 한다. 이러한 메시지는 NetMessageBase객체로 추상화 되어있어 모든 통신은 NetMessageBase객체를 기반으로 진행된다.

  • MessageBroker

    실제로 메시지를 보내는 역할을 하는 객체. 내부적으로 비동기 큐인 Channel을 이용해서 비동기적으로 다른 서버의 메시지를 보내고 응답을 기다린 후 리턴할 수 있는 함수와 서버에 메시지를 보내고 처리 결과를 리턴받지 않는 형태의 함수가 있다. 이 모듈의 모든 함수는 NetMessageBase로 추상화 된 메시지를 받도록 되어있다.

  • Worker

    실제 메시지를 보내거나 받을 때 사용하는 Channel로 된 비동기 대기가 가능한 버퍼로써 MessageBroker는 메시지를 직접 보내지 않고 Worker에 넣는 역할만 한다. Worker에 넣어진 데이터는 Worker의 thread에서 메시지를 다른 서버로 보내거나 본인 서버에서 처리가 필요한 일이면 올바른 Handler로 라우팅 한다.

데이터 전송 흐름도

리턴이 필요 없는 데이터 전송의 흐름도


데이터 전송을 Worker를 통해 전송하고 받는 측에서는 메시지의 타입을 분석해 올바른 Handler로 라우팅 해서 메시지를 처리한다.

리턴을 받는 데이터 전송의 흐름도


데이터를 전송할 때 응답을 받을 Outbox를 만들고 응답 데이터가 들어올 때까지 기다린다. 전송 될 데이터는 응답이 필요하다는 플래그를 달고 전송된다. 데이터가 타겟 서버로 전송 후 처리가 완료되면 전송 됐던 곳으로 응답을 보낸다. 전송을 했던 서버는 응답을 받게 되고 메시지에서 응답으로 전송됐다는 플레그가 확인되면 핸들링하지 않고 Outbox에 데이터를 넣는다. 데이터가 들어가면 대기가 풀리고 받았던 응답을 사용자에게 리턴한다.

HTTP

추후 Http도 추가 예정

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages