c# rabbitmq 簡單收發(fā)消息的示例代碼
發(fā)布消息:(生產(chǎn)者)
/// <summary> /// 發(fā)送消息 /// </summary> /// <param name="queue">隊(duì)列名</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ù)在本地運(yùn)行 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");
點(diǎn)擊test進(jìn)入隊(duì)列內(nèi)部:
消費(fèi)消息:
方法一:舊版可用
private static void ConsumeInfo(string queue) { try { var factory = new ConnectionFactory(); factory.HostName = "localhost";//RabbitMQ服務(wù)在本地運(yùn)行 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);//聲明隊(duì)列,隊(duì)列不存在則創(chuàng)建該隊(duì)列 //設(shè)置prefetchCount : 1來告知RabbitMQ,在未收到消費(fèi)端的消息確認(rèn)時(shí),不再分發(fā)消息,也就確保了當(dāng)消費(fèi)端處于忙碌狀態(tài)時(shí),不再分配任務(wù)。 channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); var consumer = new QueueingBasicConsumer(channel); //false為手動(dòng)確認(rèn),獲取消息后需要添加 channel.BasicAck(ea.DeliveryTag, false)確認(rèn) //true則為自動(dòng)確認(rèn),不需要這行代碼 channel.BasicConsume(queue, false, consumer); while (true) { try { var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//阻塞函數(shù),獲取隊(duì)列中的消息 var bodyReceive = ea.Body; string message = Encoding.UTF8.GetString(bodyReceive); Console.WriteLine(message); channel.BasicAck(ea.DeliveryTag, false);// 消息確認(rèn)信號,確認(rèn)后該消息將從隊(duì)列里移除 } 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ù)在本地運(yùn)行 factory.UserName = "guest";//用戶名 factory.Password = "guest";//密碼 var connection = factory.CreateConnection(); var channel = connection.CreateModel(); channel.QueueDeclare(queue, true, false, false, null);//聲明隊(duì)列,隊(duì)列不存在則創(chuàng)建該隊(duì)列 channel.BasicQos(0, 1, false);//公平分發(fā)、同一時(shí)間只處理一個(gè)消息。 var consumer = new EventingBasicConsumer(channel); //消費(fèi)者(指定消息通道)該事件在接收到消息時(shí)觸發(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); //消費(fèi)消息(在當(dāng)前通道中監(jiān)聽 queue 隊(duì)列,并進(jìn)行消費(fèi)) 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)文章希望大家以后多多支持腳本之家!
- C#?RabbitMQ的使用詳解
- C#通過rabbitmq實(shí)現(xiàn)定時(shí)任務(wù)(延時(shí)隊(duì)列)
- C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布
- C#利用RabbitMQ實(shí)現(xiàn)點(diǎn)對點(diǎn)消息傳輸
- C#使用RabbitMq隊(duì)列(Sample,Work,Fanout,Direct等模式的簡單使用)
- C#調(diào)用RabbitMQ實(shí)現(xiàn)消息隊(duì)列的示例代碼
- C#操作RabbitMQ的完整實(shí)例
- C#實(shí)現(xiàn)rabbitmq 延遲隊(duì)列功能實(shí)例代碼
- C#使用RabbitMQ發(fā)送和接收消息工具類的實(shí)現(xiàn)
相關(guān)文章
C# 進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn)(二進(jìn)制、十六進(jìn)制、十進(jìn)制互轉(zhuǎn))
這篇文章主要介紹了C# 進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn)(二進(jìn)制、十六進(jìn)制、十進(jìn)制互轉(zhuǎn)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01TreeView無刷新獲取text及value實(shí)現(xiàn)代碼
這篇文章介紹了TreeView無刷新獲取text及value實(shí)現(xiàn)代碼,有需要的朋友可以參考一下2013-10-10ASP.NET 固定標(biāo)題列與欄位的具體實(shí)現(xiàn)
客戶提這個(gè)要求很久了,最近才時(shí)間弄,但是看到百度中要沒有很多詳細(xì)的代碼。廢話不多說直接貼代碼。2013-06-06顯示非站點(diǎn)目錄及映射網(wǎng)絡(luò)磁盤路徑的圖片
本文就將教你怎樣顯示非站點(diǎn)目錄下的圖片,你可以顯示站點(diǎn)所在服務(wù)器所有驅(qū)動(dòng)器目錄的圖片,以及映射網(wǎng)絡(luò)磁盤路徑的圖片,感興趣的朋友可以了解下就當(dāng)鞏固知識了或許對你學(xué)習(xí).net有所幫助2013-02-02.NET Corek中Git的常用命令及實(shí)戰(zhàn)演練
這篇文章將通過故事的形式從Git的歷史談起,并講述Git的強(qiáng)大之處。然后通過實(shí)戰(zhàn)演練教你如何在Github以及碼云上托管我們的代碼并進(jìn)行代碼的版本控制2019-04-04asp.net Server.MapPath方法注意事項(xiàng)
當(dāng)我發(fā)布之后,對存儲(chǔ)圖片的文件夾創(chuàng)建了虛擬目錄,并賦予該目錄寫入的權(quán)限,但是,當(dāng)我上傳圖片的時(shí)候,總是失敗。以前沒遇到過這種情況,覺得很是怪異,所以想盡辦法去解決。2008-09-09.NET?Core支持Cookie和JWT混合認(rèn)證、授權(quán)的方法
這篇文章主要介紹了.NET?Core如何支持Cookie和JWT混合認(rèn)證、授權(quán),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01