[Tip,C#] 간단히 만들어보는 메시지 처리 구조 2 > IT Tip&Tech

본문 바로가기
사이트 내 전체검색


회원로그인

IT Tip&Tech

[Tip,C#] 간단히 만들어보는 메시지 처리 구조 2

페이지 정보

작성자 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일19-10-11 12:21 조회576회 댓글1건

본문

이전에 만들었던 코드는 Manager 클래스에서 메시지 큐처리를 맡고 단일 스레드에서 처리하기 때문에 어느 한 객체에서 메시지 처리에 지연이 발생하면 모두 영향을 받게 됩니다.

메시지 전송에는 동시성이 확보되지만 해당 메시지를 처리하는 부분에서는 동시성이 확보되질 못 합니다.

따라서 메시지 큐처리를 개별 구독 객체 단위로 처리하도록 바꿔 줍니다.

이렇게 하면 객체 단위로 지연 확산이 격리가 되고 동시성을 확보할 수 있습니다.

 

abstract class SubscribeBase : IDisposable

{

bool disposed = false;

    readonly ConcurrentQueue<IMessage> messageQ = new ConcurrentQueue<IMessage>();

    readonly EventWaitHandle msgEvent = new EventWaitHandle(false, EventResetMode.AutoReset);

    CancellationTokenSource cts;

    Task msgProc;

 

    protected SubscribeBase()

    {

cts = new CancellationTokenSource();

msgProc = Task.Factory.StartNew(MsgProc);

    }

~SubscribeBase()

{

Dispose(false);

}

........

void MsgProc()

{

while (cts.IsCancellationRequested == false)

{

msgEvent.WaitOne();

if (cts.IsCancellationRequested)

{

return;

}

while (messageQ.TryDequeue(out var m))

{

......

}

}

}

.........

 

}

Manager 클래스는 Send 호출시 바로 Map 을 뒤져서 해당 구독객체의 메시지 큐에 메시지를 밀어넣습니다.

public void Send(IMessage message) 

{

if (MsgSubscriptionMap.ContainsKey(message.ID))

{

var subIds = MsgSubscriptionMap[message.ID];

foreach (var id in subIds)

{

if (Subscribers.ContainsKey(id))

{

Subscribers[id].Receive(message);

}

}

}

 

 

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

리틀캔들님의 댓글

리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

아~ 구독이라는 개념이 뭔가 아해가 안갔었는데 이글을 보고서 좀 이해가 갔습니다.
좋은정보 감사해요^^

IT Tip&Tech 목록

Total 127건 1 페이지
IT Tip&Tech 목록
번호 제목 글쓴이 날짜 조회
127 우클릭 context 메뉴에서 CMD 창 열기 / VSCode 열기 메뉴 추가 레지스트리 댓글1 첨부파일 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-21 86
126 Redmine 다음 메일 smtp 설정 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-19 85
열람중 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 2 댓글1 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-11 577
124 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-01 491
123 [Tip,C#] protobuf 메시지 정의 나누어 배포하기 (내용추가) 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-23 546
122 [Tip,C#] protobuf 메시지 정의 나누어 배포하기 댓글3 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-18 586
121 QT Creator, undefined symbol: FT_Get_Font_Format 오류 리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-08 645
120 배경 누끼 따주는 사이트 리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-27 349
119 [link] 메모리 관련 글 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-15 1926
118 마소가 Azure Sphere 라는걸 만들었데요. 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-17 3078
117 MTPutty 댓글2 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-16 3336
116 Visual Studio 툴바 아이콘들 사라질때 해결방법 인기글첨부파일 black_H 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-13 2675
115 openvpn 연결 후 1시간뒤 연결이 자동으로 끊긴다면 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-04 3524
114 openvpn ip 고정시키기 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-03 2575
113 openvpn id/pwd 로 접속하기 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-02 2247
게시물 검색

접속자집계

오늘
814
어제
1,097
최대
3,675
전체
708,325
회사소개 개인정보취급방침 서비스이용약관
Copyright © LittleCandle All rights reserved.
문의메일 : littlecandle99@gmail.com
상단으로
모바일 버전으로 보기