RabbitMQ初識及簡單實踐
阿新 • • 發佈:2022-03-03
這篇文章比較全面詳細的介紹了RabbitMQ中涉及的相關概念及元件,推薦閱讀超詳細的RabbitMQ入門,看這篇就夠了!-阿里雲開發者社群 (aliyun.com).
文章是java實現的,因為工作使用的是C#, 所以使用C#進行實踐。
1. 生產者:
1 //1、建立連線工廠 2 var factory = new ConnectionFactory() 3 { 4 HostName = "localhost", 5 Port = 5672, 6 Password = "guest", 7 UserName = "guest", 8 VirtualHost = "/" 9 }; 10 using (var connection = factory.CreateConnection()) 11 { 12 var channel = connection.CreateModel(); 13 // 2、定義佇列 14 channel.QueueDeclare(queue: "test", 15 durable: false, 16 exclusive: false, 17 autoDelete: false, 18 arguments: null); 19 20 string message = "Hello World!"; 21 var body = Encoding.UTF8.GetBytes(message); 22 23 // 3、傳送訊息 24 var properties = channel.CreateBasicProperties(); 25 properties.Persistent = true; // 設定訊息持久化 26 channel.BasicPublish(exchange: "", 27 routingKey: "test", 28 basicProperties: properties,29 body: body); 30 } 31 _logger.LogInformation("成功傳送訊息");
2. 消費者:
1 // 1、建立連線 2 var factory = new ConnectionFactory() 3 { 4 HostName = "localhost", 5 Port = 5672, 6 Password = "guest", 7 UserName = "guest", 8 VirtualHost = "/" 9 }; 10 var connection = factory.CreateConnection(); 11 var channel = connection.CreateModel(); 12 channel.QueueDeclare(queue: "test", durable: false, exclusive: false, autoDelete: false, arguments: null); 13 var consumer = new EventingBasicConsumer(channel); 14 consumer.Received += (model, ea) => 15 { 16 Console.WriteLine($"model:{model}"); 17 var body = ea.Body; 18 //業務邏輯 19 var message = Encoding.UTF8.GetString(body.ToArray()); 20 Console.WriteLine(message); 21 }; 22 channel.BasicConsume(queue: "test", 23 autoAck: true, 24 consumer: consumer);
實踐為 最簡單的單生產者,單消費者模式。