2017-05-22

使用 .Net client 連線至 RabbitMQ 收發訊息

繼之前 使用 RabbitMQ.Client 連線至 RabbitMQ 出現 BrokerUnreachableException 問題解決後,終於又可以繼續測試 RabbitMQ 了,要比較的不僅僅是 mq 的能力,也要比較使用上的便利性及周邊管理功能或是其他套件的完整度,今天就先紀錄一下 RabbitMQ 的基本操作:收發訊息


安裝 RabbitMQ.Client

RabbitMQ 官方的介紹 .NET/C# RabbitMQ client library,說明很完整

1PLUGIN

接收訊息

如果有多個 consumer (接受端),記得要先啟動 consumer,否則訊息將都會由第一啟動的 consumer 獨佔

如果啟動接收訊息時出現錯誤,請先參考 使用 RabbitMQ.Client 連線至 RabbitMQ 出現 BrokerUnreachableException

void Main()
{
 //初始化連線資訊
 var factory = new ConnectionFactory();
 //設定 RabbitMQ 位置
 factory.HostName = "localhost";
 //設定 RabbitMQ port
 factory.Port = 5672;
 //設定連線 RabbitMQ username
 factory.UserName = "yowko";
 //設定 RabbitMQ password
 factory.Password = "pass.123";


 //開啟連線
 using (var connection = factory.CreateConnection())
 //開啟 channel
 using (var channel = connection.CreateModel())
 {
  //宣告 queues
  channel.QueueDeclare("yowkoTest", false, false, false, null);
  //建立 consumer
  var consumer = new QueueingBasicConsumer(channel);
  channel.BasicConsume("yowkoTest", true, consumer);

  Console.WriteLine(" waiting for message.");
  //持續等著接收訊息
  while (true)
  {
   //從 RabbitMQ 取得訊息
   var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();

   var body = ea.Body;
   var message = Encoding.UTF8.GetString(body);
   Console.WriteLine("Received {0}", message);
   Thread.Sleep(5000);
  }
 }
}

發送訊息

如果啟動發送訊息時出現錯誤,請先參考 使用 RabbitMQ.Client 連線至 RabbitMQ 出現 BrokerUnreachableException

void Main()
{
 //初始化連線資訊
 var factory = new ConnectionFactory();
 //設定 RabbitMQ 位置
 factory.HostName = "localhost";
 //設定 RabbitMQ port
 factory.Port = 5672;
 //設定連線 RabbitMQ username
 factory.UserName = "yowko";
 //設定 RabbitMQ password
 factory.Password = "pass.123";


 //開啟連線
 using (var connection = factory.CreateConnection())
 //開啟 channel
 using (var channel = connection.CreateModel())
 {
  //宣告 exchanges,RabbitMQ提供了四種Exchange模式:fanout,direct,topic,header
  channel.ExchangeDeclare("yowko", ExchangeType.Fanout);
  //宣告 queues
  channel.QueueDeclare("yowkoTest", false, false, false, null);
  //將 exchnage、queue 依 route rule 綁定
  channel.QueueBind("yowkoTest", "yowko", "hello", null);
  //  channel.QueueDeclare("hello", false, false, false, null);
  string message = $"Hello World-{Guid.NewGuid()}";
  var body = Encoding.UTF8.GetBytes(message);
  channel.BasicPublish("yowko", "hello", null, body);
  Console.WriteLine(" set {0}", message);
 }
}

心得

使用上還算便利,但很多參數還不知道如何使用,有較深入研究使用會再另外紀錄介紹,敬請期待

參考資訊

  1. 使用 RabbitMQ.Client 連線至 RabbitMQ 出現 BrokerUnreachableException
  2. .NET/C# RabbitMQ client library
  3. RabbitMQ原理與相關操作(一)

沒有留言:

張貼留言