c# rabbitmq 簡單收發(fā)消息的示例代碼
發(fā)布消息:(生產(chǎn)者)
/// <summary> /// 發(fā)送消息 /// </summary> /// <param name="queue">隊列名</param> /// <param name="message">消息內(nèi)容</param> private static void PublishInfo(string queue, string message) { try { var factory = new ConnectionFactory(); factory.HostName = "localhost";//RabbitMQ服務(wù)在本地運行 factory.UserName = "guest";//用戶名 factory.Password = "guest";//密碼 using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { bool durable = true;//將消息標(biāo)記為持久性 channel.QueueDeclare(queue, durable, false, 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進入隊列內(nèi)部:
消費消息:
方法一:舊版可用
private static void ConsumeInfo(string queue) { try { var factory = new ConnectionFactory(); factory.HostName = "localhost";//RabbitMQ服務(wù)在本地運行 factory.UserName = "guest";//用戶名 factory.Password = "guest";//密碼 using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { //bool durable = true;//將消息標(biāo)記為持久性 //channel.QueueDeclare("sljcgx:finish-queue", durable, false, false, null);//聲明隊列,隊列不存在則創(chuàng)建該隊列 //設(shè)置prefetchCount : 1來告知RabbitMQ,在未收到消費端的消息確認(rèn)時,不再分發(fā)消息,也就確保了當(dāng)消費端處于忙碌狀態(tài)時,不再分配任務(wù)。 channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); var consumer = new QueueingBasicConsumer(channel); //false為手動確認(rèn),獲取消息后需要添加 channel.BasicAck(ea.DeliveryTag, false)確認(rèn) //true則為自動確認(rèn),不需要這行代碼 channel.BasicConsume(queue, false, consumer); while (true) { try { var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//阻塞函數(shù),獲取隊列中的消息 var bodyReceive = ea.Body; string message = Encoding.UTF8.GetString(bodyReceive); Console.WriteLine(message); channel.BasicAck(ea.DeliveryTag, false);// 消息確認(rèn)信號,確認(rèn)后該消息將從隊列里移除 } 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服務(wù)在本地運行 factory.UserName = "guest";//用戶名 factory.Password = "guest";//密碼 var connection = factory.CreateConnection(); var channel = connection.CreateModel(); channel.QueueDeclare(queue, true, false, false, null);//聲明隊列,隊列不存在則創(chuàng)建該隊列 channel.BasicQos(0, 1, false);//公平分發(fā)、同一時間只處理一個消息。 var consumer = new EventingBasicConsumer(channel); //消費者(指定消息通道)該事件在接收到消息時觸發(fā) consumer.Received += (sender, e) => { byte[] body = e.Body.ToArray(); //消息字節(jié)數(shù)組 string message = Encoding.UTF8.GetString(body); //消息內(nèi)容 Console.WriteLine(message); channel.BasicAck(e.DeliveryTag, false); //手工確認(rèn) }; channel.BasicConsume(queue, false, consumer); //消費消息(在當(dāng)前通道中監(jiān)聽 queue 隊列,并進行消費) Console.ReadLine(); connection.Close(); channel.Close(); } catch (System.Exception ex) { Console.WriteLine(ex.ToString()); } }
到此這篇關(guān)于c# rabbitmq 簡單收發(fā)消息的示例代碼的文章就介紹到這了,更多相關(guān)c# rabbitmq 收發(fā)消息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# 進制轉(zhuǎn)換的實現(xiàn)(二進制、十六進制、十進制互轉(zhuǎn))
這篇文章主要介紹了C# 進制轉(zhuǎn)換的實現(xiàn)(二進制、十六進制、十進制互轉(zhuǎn)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01TreeView無刷新獲取text及value實現(xiàn)代碼
這篇文章介紹了TreeView無刷新獲取text及value實現(xiàn)代碼,有需要的朋友可以參考一下2013-10-10ASP.NET 固定標(biāo)題列與欄位的具體實現(xiàn)
客戶提這個要求很久了,最近才時間弄,但是看到百度中要沒有很多詳細的代碼。廢話不多說直接貼代碼。2013-06-06顯示非站點目錄及映射網(wǎng)絡(luò)磁盤路徑的圖片
本文就將教你怎樣顯示非站點目錄下的圖片,你可以顯示站點所在服務(wù)器所有驅(qū)動器目錄的圖片,以及映射網(wǎng)絡(luò)磁盤路徑的圖片,感興趣的朋友可以了解下就當(dāng)鞏固知識了或許對你學(xué)習(xí).net有所幫助2013-02-02.NET Corek中Git的常用命令及實戰(zhàn)演練
這篇文章將通過故事的形式從Git的歷史談起,并講述Git的強大之處。然后通過實戰(zhàn)演練教你如何在Github以及碼云上托管我們的代碼并進行代碼的版本控制2019-04-04.NET?Core支持Cookie和JWT混合認(rèn)證、授權(quán)的方法
這篇文章主要介紹了.NET?Core如何支持Cookie和JWT混合認(rèn)證、授權(quán),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01