rabbitmq
rabbitmq
rabbitmq와 같은 messaging queue를 사용하는이유는 다음과 같을것이다.
- 실시간으로 데이터를 빠르게 처리해야한다.
- 메시지 유실이 없어야한다.
- 대용량 실시간 traffic에 대한 확장(cluster)에 유연 해야한다.
메신저 서비스와 같은 카카오톡, 라인 그밖의 채팅시스템에서는 무조건적으로 채택해야할 기술중 하나라고 생각된다.
AMQP 프로토콜을 사용하여 진행한 간단한 테스트를 정리해본다.
setup broker
테스트 환경이므로 빠르게 rabbitmq를 docker를 활용하여 띄어본다.
docker hub rabbitmq official는 https://hub.docker.com/_/rabbitmq/ 에서 확인할수있다.
필자는 config를 commandline 대신 management dashboard를 활용할것이기에 management version으로 실행하였다.
localhost:8080 접속하여 container 환경변수로 정의된 user 와 password 를 입력한후 다음의 설정을 진행한다.
- client 접근계정 생성
- virtual host 생성
- 생성된 계정에 생성된 virtual host access 권한 설정
user: jaehunpark
password: 0000
virtual host: mq
producer
|
|
consumer
|
|
rabbitmq에서 사용되는 메시징 처리 방식에는 fanout, direct, topic 방식이 존재한다.
해당예제는 topic( 패턴매칭 방식 )으로 작성하였다.
- fanout: 알려진 모든 Queue에 메시지 전달
- direct: 지정된 routingKey를 가진 Queue에만 메시지 전달 함
- topic: 지정된 패턴 바인딩 형태에 일치하는 Queue에만 메시지 전달. #(여러단어), *(한단어)를 통한 문자열 패턴 매칭
- header: 헤더에 포함된 key=value의 일치조건에 따라서 메시지 전달
또한 consumer는 unique한 queue를 가진다
client들이 중복된 queue를 가질경우 broker는 자동으로 메시지를 분배하여 메시지를 publish 한다.( Round-robin 으로 처리 )
참고
이미 생성된 exchange나 queue에 대해서 생성된 설정정보를 반드시 따라야하며 생성된 설정정보를 벗어난 설정으로 연결시 ( 특히 durable, persistent, autoDelete 등 ) 에러를 뱉으니 주의해야한다
참고
- https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html
- https://github.com/gjchoi/gjchoi.github.io/blob/master/_posts/2016-02-27-rabbit-mq-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0.md
- https://www.squaremobius.net/amqp.node/channel_api.html
- http://blog.hkwon.me/rabbitmq-php-node-jsreul-hwalyonghae-gcm-push-ceorihagi/