這篇文章給大家分享的是有關C#如何用RabbitMQ實現消息訂閱與發布的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
扇形交換機,采用廣播模式,根據綁定的交換機,路由到與之對應的所有隊列。一個發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上。很像子網廣播,每臺子網內的主機都獲得了一份復制的消息。Fanout交換機轉發消息是最快的。

在同一個Virtual host下新增兩個隊列Q1,Q2,如下圖所示:

將兩個隊列綁定到系統默認的fanout交換機,如下所示:

生產者,采用Fanout類型交換機發布消息,如下圖所示:

當生產者發布 一條消息時,Q1,Q2兩個隊列均會收到,如下圖所示:

當啟動消費者后,兩個消費者,均會訂閱到相關消息,如下圖所示:

建立連接后,將通道聲明類型為Fanout的交換機,如下所示:
/// <summary>
/// fanout類型交換機,發送消息
/// </summary>
public class RabbitMqFanoutSendHelper : RabbitMqHelper {
/// <summary>
/// 發送消息
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public bool SendMsg(string msg)
{
try
{
using (var conn = GetConnection("/Alan.hsiang"))
{
using (var channel = conn.CreateModel())
{
channel.ExchangeDeclare(exchange: "amq.fanout", type: ExchangeType.Fanout,durable:true);
var body = Encoding.UTF8.GetBytes(msg);
channel.BasicPublish(exchange: "amq.fanout",
routingKey: "",
basicProperties: null,
body: body);
//Console.WriteLine(" [x] Sent {0}", message);
};
};
return true;
}
catch (Exception ex)
{
throw ex;
}
}
}建立連接后,通道聲明類型為Fanout的交換機,并綁定隊列進行訂閱,如下所示:
/// <summary>
/// 扇形交換機接收消息
/// </summary>
public class RabbitMqFanoutReceiveHelper : RabbitMqHelper
{
public RabbitMqReceiveEventHandler OnReceiveEvent;
private IConnection conn;
private IModel channel;
private EventingBasicConsumer consumer;
public bool StartReceiveMsg(string queueName)
{
try
{
conn = GetConnection("/Alan.hsiang");
channel = conn.CreateModel();
channel.ExchangeDeclare(exchange: "amq.fanout", type: ExchangeType.Fanout,durable:true);
//此處隨機取出交換機下的隊列
//var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "amq.fanout", routingKey: "");
consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
//Console.WriteLine(" [x] Received {0}", message);
if (OnReceiveEvent != null)
{
OnReceiveEvent(queueName+"::"+message);
}
};
channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
}C#是一個簡單、通用、面向對象的編程語言,它由微軟Microsoft開發,繼承了C和C++強大功能,并且去掉了一些它們的復雜特性,C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優雅的語法風格、創新的語言特性和便捷的面向組件編程從而成為.NET開發的首選語言,但它不適用于編寫時間急迫或性能非常高的代碼,因為C#缺乏性能極高的應用程序所需要的關鍵功能。
感謝各位的閱讀!關于“C#如何用RabbitMQ實現消息訂閱與發布”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。