c# rabbitmq 簡單收發訊息的示例程式碼
阿新 • • 發佈:2020-08-19
釋出訊息:(生產者)
/// <summary> /// 傳送訊息 /// </summary> /// <param name="queue">佇列名</param> /// <param name="message">訊息內容</param> private static void PublishInfo(string queue,string message) { try { var factory = new ConnectionFactory(); factory.HostName = "localhost";//RabbitMQ服務在本地執行 factory.UserName = "guest";//使用者名稱 factory.Password = "guest";//密碼 using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { bool durable = true;//將訊息標記為永續性 channel.QueueDeclare(queue,durable,false,null); IBasicProperties properties = channel.CreateBasicProperties(); properties.DeliveryMode = 2; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish("",queue,properties,body); //開始傳遞 } } } catch (System.Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); }
使用:
PublishInfo("test","222222222222");
點選test進入佇列內部:
消費訊息:
方法一:舊版可用
private static void ConsumeInfo(string queue) { try { var factory = new ConnectionFactory(); factory.HostName = "localhost";//RabbitMQ服務在本地執行 factory.UserName = "guest";//使用者名稱 factory.Password = "guest";//密碼 using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { //bool durable = true;//將訊息標記為永續性 //channel.QueueDeclare("sljcgx:finish-queue",null);//宣告佇列,佇列不存在則建立該佇列 //設定prefetchCount : 1來告知RabbitMQ,在未收到消費端的訊息確認時,不再分發訊息,也就確保了當消費端處於忙碌狀態時,不再分配任務。 channel.BasicQos(prefetchSize: 0,prefetchCount: 1,global: false); var consumer = new QueueingBasicConsumer(channel); //false為手動確認,獲取訊息後需要新增 channel.BasicAck(ea.DeliveryTag,false)確認 //true則為自動確認,不需要這行程式碼 channel.BasicConsume(queue,consumer); while (true) { try { var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//阻塞函式,獲取佇列中的訊息 var bodyReceive = ea.Body; string message = Encoding.UTF8.GetString(bodyReceive); Console.WriteLine(message); channel.BasicAck(ea.DeliveryTag,false);// 訊息確認訊號,確認後該訊息將從佇列裡移除 } catch (System.Exception ex) { Console.WriteLine(ex.Message); } } } } } catch (System.Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); }
方法二:(通用)
private static void ConsumeInfo2(string queue) { try { var factory = new ConnectionFactory(); factory.HostName = "localhost";//RabbitMQ服務在本地執行 factory.UserName = "guest";//使用者名稱 factory.Password = "guest";//密碼 var connection = factory.CreateConnection(); var channel = connection.CreateModel(); channel.QueueDeclare(queue,true,null);//宣告佇列,佇列不存在則建立該佇列 channel.BasicQos(0,1,false);//公平分發、同一時間只處理一個訊息。 var consumer = new EventingBasicConsumer(channel); //消費者(指定訊息通道)該事件在接收到訊息時觸發 consumer.Received += (sender,e) => { byte[] body = e.Body.ToArray(); //訊息位元組陣列 string message = Encoding.UTF8.GetString(body); //訊息內容 Console.WriteLine(message); channel.BasicAck(e.DeliveryTag,false); //手工確認 }; channel.BasicConsume(queue,consumer); //消費訊息(在當前通道中監聽 queue 佇列,並進行消費) Console.ReadLine(); connection.Close(); channel.Close(); } catch (System.Exception ex) { Console.WriteLine(ex.ToString()); } }
到此這篇關於c# rabbitmq 簡單收發訊息的示例程式碼的文章就介紹到這了,更多相關c# rabbitmq 收發訊息內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!