[.NET Core 2.x] RabbitMQ 연동
순차적으로 처리가 보장되어야 하는 로직이 존재한다면 MQ를 이용하는 것이 좋다
RabbitMQ는 대표적인 MQ 중 하나로서 .NET Core에서 어떻게 연동 되는지를 다루려고 한다.
1. RabbitMQ client 설치하기
> VS Code 터미널로 rabbitmq client를 설치 해 주자.
dotnet add package RabbitMQ.Client --version 5.0.1 |
2. RabbitMQ server 설치하기
> RabbitMQ server를 통해서 메시지를 교환하게 된다.
(다운로드 : https://www.rabbitmq.com/download.html)
> RabbitMQ란
- 서비스 간에 메시지를 전달해주는 시스템
- producers : 메시지를 발송자
- consumers : 매시지 수신자
- producers는 Queue를 통해 consumer에게 메시지를 보내게 된다.
- Queue의 특성상 producer가 보낸 메시지들이 consumer에게 순차적으로 전달이 되기 때문에 순서를 보장해야 하는 서비스에 사용이 된다.
- Queue에 여러 설정을 통해 동기 방식으로 메시지를 처리할 수도 있다.
> RabbitMQ Server 3306 port를 통해 서비스 된다.
3. tutorials
(http://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html)
a. send 부분
using RabbitMQ.Client; { |
> ConnectionFactory를 통해 RabbitMQ server와의 연결 관리를 해준다.
> connection을 맺으면 connectionFactory에서 관리가 된다.
> 다시 connection에서 exchange와 queue를 관리 하기 위한 Channel을 만들고 channel을 통해 메시지를 송수신 한다.
> 해당 예제는 Hello라는 이름을 가진 Queue를 생성하였고 이를 통해 메시지를 publish할 수 있다.
b. receive 부분
using RabbitMQ.Client; |
> receive 부분에서는 send 부분가 동일한 이름을 가진 Queue를 선언 해야만 send 부분에서 보내는 메시지를 받을 수 있게 된다.
> BasicConsumer 에서 어떤 이름을 가진 Queue에 대해서 메시지를 받을 것인지 지정할 수 있다.
위의 예제는 Queue를 통해서 메시지를 주고 받는 예제이다.
더 나아가 exchange를 이용한다면 메시지의 broadcast도 가능하도록 서비스를 구성할 수 있다.
rabbitMQ에서 예제를 친절하게 제공하고 있으므로 참고해서 활용할 수 있을 것이다.