[RabbitMQ] C# 서비스로 WorkQueue, Exchange 구현
- RabbitMQ
- 2022. 3. 31. 17:49
참조
목적
- C# 코드로 RabbitMQ 연결하여 WorkQueue, Exchange 구현 하도록 코드 작성 진행합니다.
- Work Queue 의 역할은 RabbitMQ 의 Queue 에 메시지를 저장하여 Consumer 에게 전달 하도록 하는 역할을 합니다.
- Exchange 는 Consumer 가 작업을 완료 한 후, Excnage 방식으로 RabbitMQ 에 메시지를 저장할 시, 해당 결과값을 출력하는 역할을 합니다.
예제 코드
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;
var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using (var channel = connection.CreateModel())
{
while (true)
{
Console.Write("보낼 메시지 입력 : ");
string message = Console.ReadLine();
if (message == "exit")
{
break;
}
WorkTask(message, channel);
ExchangeTask(channel);
}
}
// 작업 큐
void WorkTask(string message, IModel channel)
{
channel.QueueDeclare(queue: "tf_serving_queue",
durable: true, // 메시지가 수행되어야 큐에서 삭제 되도록
exclusive: false,
autoDelete: false,
arguments: null);
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
channel.BasicPublish(exchange: "",
routingKey: "tf_serving_queue",
basicProperties: properties,
body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
// Exchange
void ExchangeTask(IModel channel)
{
channel.ExchangeDeclare(exchange: "tf_serving_queue", type: "fanout");
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName,
exchange: "tf_serving_queue",
routingKey: "");
Console.WriteLine(" [*] Waiting for logs.");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] {0}", message);
};
channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
실행 결과
- 아래와 같이 메시지를 2개 보냈습니다.
- 실제로 RabbitMQ 에 2개의 메시지가 Queue 에 저장 되었는지 확인하였습니다.
보낼 메시지 입력 : input
[x] Sent input
[*] Waiting for logs.
Press [enter] to exit.
보낼 메시지 입력 : input
[x] Sent input
[*] Waiting for logs.
Press [enter] to exit.
RabbitMQ Manager 에서 Queue 확인
- 확인 결과, Queue 에 2개의 메시지가 저장되어 있는 것을 확인할 수 있습니다.
728x90
'RabbitMQ' 카테고리의 다른 글
[RabbitMQ] 게시, 구독(Publish / Subscribe) (0) | 2022.04.01 |
---|---|
[RabbitMQ] RabbitMQ Docker Container 로 실행하기 (0) | 2022.03.31 |
[RabbitMQ] Work Queues (0) | 2022.03.30 |
[RabbitMQ] RabbitMQ - 기초 (0) | 2022.03.30 |
[RabbitMQ] Fast API 서비스와 RabbitMQ 통신 테스트 (0) | 2022.03.30 |
이 글을 공유하기