
107
4
장
여러분이 사용하지 않는 Asyncio 라이브러리 20개
예제
4-8
수신자
2
번 클라이언트의 출력
$ mq_client_listen.py --listen /queue/blah
Starting up bd4e3baa
I am ('127.0.0.1', 55386)
Received by bd4e3baa: b'Msg 0 from 6b5a8e1d'
Received by bd4e3baa: b'Msg 2 from 6b5a8e1d'
Received by bd4e3baa: b'Msg 4 from 6b5a8e1d'
Server closed.
우리의 작은 메시지 브로커가 작동하였다. 네트워크 영역이 복잡함을 감안할 때 코드는 이해하
기 아주 쉬웠지만, 안타깝게도 설계에 문제가 있다.
문제는 브로커가 메시지를 받은 코루틴 내에서 구독자에게 메시지를 전송하는 점이다. 특정 구
독자가 너무 느리다면, [예제
4
-
2
]의
await
gather
(...)
줄에서 많은 시간을 소모할 것이고,
대기하는 동안 메시지를 받거나 처리할 수 없을 것이다.
메시지의 수신과 송신을 분리하는 대처 방안이 있다. 다음 사례 연구에서 코드를 재구성
refactor
해보겠다.
4.1.2
사례 연구: 메시지 대기열 개선하기
이번 사례 연구에서는 우리의 작은 메시지 브로커의 설계를 개선해보겠다. 수신자와