成人欧美一区二区三区的电影,日韩一级一欧美一级国产,国产成人国拍亚洲精品,无码人妻精品一区二区三区毛片,伊人久久无码大香线蕉综合

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# RabbitMQ詳解:從基礎(chǔ)到實(shí)戰(zhàn)的消息隊(duì)列實(shí)現(xiàn)與應(yīng)用

admin
2025年9月19日 14:36 本文熱度 361

前言

RabbitMQ 是一個(gè)流行的開(kāi)源消息中間件,它基于 AMQP(高級(jí)消息隊(duì)列協(xié)議)實(shí)現(xiàn),廣泛用于分布式系統(tǒng)中異步消息傳遞、解耦服務(wù)之間的通信、提高系統(tǒng)的可伸縮性和可靠性。RabbitMQ 是一種消息代理,負(fù)責(zé)接收、存儲(chǔ)并轉(zhuǎn)發(fā)消息,它支持多種協(xié)議、可靠性機(jī)制以及多種客戶(hù)端語(yǔ)言,包括 C#。

在本篇文章中,我們將深入探討如何在 C# 中使用 RabbitMQ,介紹其基本概念、核心特性以及實(shí)際操作。

1. 安裝 RabbitMQ

1.1 本地安裝 RabbitMQ

首先,確保你已經(jīng)安裝了 RabbitMQ。你可以從 RabbitMQ 官網(wǎng)下載并安裝。RabbitMQ 依賴(lài) Erlang,因此在安裝 RabbitMQ 前需要先安裝 Erlang。

安裝完成后,RabbitMQ 會(huì)自動(dòng)啟動(dòng),管理界面默認(rèn)運(yùn)行在 http://localhost:15672,用戶(hù)名和密碼均為 guest。


1.2 安裝 C# 客戶(hù)端庫(kù)

在 C# 項(xiàng)目中使用 RabbitMQ,通常會(huì)使用 RabbitMQ.Client 包。你可以通過(guò) NuGet 安裝:

Install-Package RabbitMQ.Client

或者直接搜索



2. 基本概念

RabbitMQ 中有幾個(gè)核心概念,理解這些概念對(duì)你使用 RabbitMQ 非常重要:

  • Producer(生產(chǎn)者)
    :發(fā)送消息到消息隊(duì)列的客戶(hù)端。
  • Consumer(消費(fèi)者)
    :從消息隊(duì)列中接收消息的客戶(hù)端。
  • Queue(隊(duì)列)
    :消息存儲(chǔ)的地方,消費(fèi)者從隊(duì)列中獲取消息。
  • Exchange(交換機(jī))
    :決定消息如何路由到隊(duì)列的規(guī)則,RabbitMQ 支持四種交換機(jī)類(lèi)型:direct、topicfanout、headers。
  • Binding(綁定)
    :交換機(jī)與隊(duì)列之間的關(guān)聯(lián)。
  • Routing Key(路由鍵)
    :路由消息的鍵,用來(lái)匹配交換機(jī)的路由規(guī)則。


3. C# 實(shí)現(xiàn) RabbitMQ 消息隊(duì)列

3.1 發(fā)送消息(生產(chǎn)者)

以下代碼演示了如何創(chuàng)建一個(gè)簡(jiǎn)單的生產(chǎn)者,它將消息發(fā)送到一個(gè)隊(duì)列中:

using RabbitMQ.Client;using System;using System.Text;class Producer{    static void Main(string[] args)    {        // 創(chuàng)建一個(gè)連接工廠        var factory = new ConnectionFactory() { HostName = "localhost" };        using (var connection = factory.CreateConnection())        using (var channel = connection.CreateModel())        {            // 聲明一個(gè)隊(duì)列            channel.QueueDeclare(queue: "hello",                                 durable: false// 消息隊(duì)列是否持久化                                 exclusive: false// 隊(duì)列是否只在連接時(shí)存在                                 autoDelete: false// 隊(duì)列用完后是否自動(dòng)刪除                                 arguments: null);            string message = "Hello, RabbitMQ!";            var body = Encoding.UTF8.GetBytes(message);            // 發(fā)送消息到隊(duì)列            channel.BasicPublish(exchange: "",                                 routingKey: "hello",  // 路由鍵                                 basicProperties: null,                                 body: body);            Console.WriteLine(" [x] Sent {0}", message);        }        Console.WriteLine(" Press [enter] to exit.");        Console.ReadLine();    }}

3.2 接收消息(消費(fèi)者)

接下來(lái),我們編寫(xiě)一個(gè)簡(jiǎn)單的消費(fèi)者,它將從隊(duì)列中接收并處理消息:

using RabbitMQ.Client;using RabbitMQ.Client.Events;using System;using System.Text;class Consumer{    static void Main(string[] args)    {        // 創(chuàng)建一個(gè)連接工廠        var factory = new ConnectionFactory() { HostName = "localhost" };        using (var connection = factory.CreateConnection())        using (var channel = connection.CreateModel())        {            // 聲明一個(gè)隊(duì)列            channel.QueueDeclare(queue: "hello",                                 durable: false,                                 exclusive: false,                                 autoDelete: false,                                 arguments: null);            Console.WriteLine(" [*] Waiting for messages. To exit press [Ctrl+C]");            // 創(chuàng)建一個(gè)消費(fèi)者            var 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);            };            // 開(kāi)始消費(fèi)消息            channel.BasicConsume(queue: "hello",                                 autoAck: true// 自動(dòng)確認(rèn)消息                                 consumer: consumer);            Console.ReadLine();        }    }}

3.3 運(yùn)行示例

  1. 啟動(dòng)生產(chǎn)者
    :運(yùn)行 Producer 程序,生產(chǎn)者將消息發(fā)送到 RabbitMQ 隊(duì)列。
  2. 啟動(dòng)消費(fèi)者
    :運(yùn)行 Consumer 程序,消費(fèi)者將從隊(duì)列中接收并處理消息。


4. 高級(jí)特性

4.1 消息確認(rèn)(Message Acknowledgment)

默認(rèn)情況下,RabbitMQ 會(huì)在消費(fèi)者接收到消息后自動(dòng)確認(rèn)。但是,在某些情況下,你可能希望顯式確認(rèn)消息,以確保消息已被成功處理。

channel.BasicConsume(queue"您好《編程光年》",                     autoAckfalse, // 設(shè)置為 false 手動(dòng)確認(rèn)                     consumer: consumer);
consumer.Received += (model, ea) =>{    var body = ea.Body.ToArray();    var message = Encoding.UTF8.GetString(body);    Console.WriteLine(" [x] Received {0}", message);
    // 手動(dòng)確認(rèn)消息    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiplefalse);};


4.2 消息持久化

如果你希望消息在 RabbitMQ 重啟后不丟失,可以設(shè)置消息持久化:

channel.QueueDeclare(queue"您好《編程光年》",                     durabletrue, // 消息隊(duì)列持久化                     exclusivefalse,                     autoDeletefalse,                     argumentsnull);
channel.BasicPublish(exchange"",                     routingKey"hello",                     basicPropertiesnew BasicProperties { DeliveryMode = 2 }, // 消息持久化                     body: body);


4.3 發(fā)布/訂閱模式(Fanout Exchange)

RabbitMQ 支持多種交換機(jī)類(lèi)型,fanout 交換機(jī)會(huì)將消息廣播到所有綁定的隊(duì)列,適合實(shí)現(xiàn)發(fā)布/訂閱模式。

channel.ExchangeDeclare(exchange"logs", type: ExchangeType.Fanout);
channel.BasicPublish(exchange"logs",                     routingKey"",                     basicPropertiesnull,                     body: Encoding.UTF8.GetBytes("Hello World!"));



總結(jié)

RabbitMQ 是一種強(qiáng)大的消息中間件,廣泛應(yīng)用于分布式系統(tǒng)中異步消息傳遞。通過(guò)它,你可以實(shí)現(xiàn)系統(tǒng)解耦、提高可伸縮性、保證消息的可靠傳遞。使用 C# 與 RabbitMQ 客戶(hù)端,你可以輕松構(gòu)建高效的消息隊(duì)列系統(tǒng)。

  • 生產(chǎn)者
    :發(fā)送消息到隊(duì)列。
  • 消費(fèi)者
    :從隊(duì)列中接收并處理消息。
  • 消息確認(rèn)與持久化
    :保證消息的可靠性和不丟失。
  • 交換機(jī)與路由
    :根據(jù)路由規(guī)則將消息分發(fā)到不同的隊(duì)列。

希望這篇文章能幫助你更好地理解和使用 RabbitMQ。


該文章在 2025/9/20 11:18:12 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved