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)信號(hào),確認(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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net core應(yīng)用docke部署到centos7的全過程
這篇文章主要給大家介紹了關(guān)于asp.net core應(yīng)用docke部署到centos7的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
充分利用ASP.NET的三種緩存提高站點(diǎn)性能的注意方法
充分利用ASP.NET的三種緩存提高站點(diǎn)性能的注意方法...2007-09-09
擁有網(wǎng)頁版小U盤 ASP.NET實(shí)現(xiàn)文件上傳與下載功能
這篇文章主要為大家詳細(xì)介紹了ASP.NET實(shí)現(xiàn)文件上傳與下載功能,類似于U盤功能,具有一定的參考價(jià)值。感興趣的小伙伴們可以參考一下2016-08-08
ASP.NET?使用?Dispose?釋放資源的四種方法詳細(xì)介紹
本篇文章主要介紹了ASP.NET?使用?Dispose?釋放資源的四種方法,有興趣的同學(xué)可以來看看,喜歡的話記得收藏一下哦,方便下次瀏覽觀看2021-11-11
談?wù)勅绾卧贏SP.NET Core中實(shí)現(xiàn)CORS跨域
本篇文章主要介紹了如何在ASP.NET Core中實(shí)現(xiàn)CORS跨域,CORS主要是解決Ajax跨域限制的問題,有興趣的可以了解一下。2016-12-12

