国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

RabbitMQ消息傳遞模式和NetCore案例

開發 架構
引入RabbitMQ可以實現應用程序和其他服務之間的異步通信,這種方式可以大大提高系統的可靠性、擴展性和性能。特別是在高并發的情況下,使用RabbitMQ可以避免系統響應變慢,提高系統的吞吐量。

RabbitMQ中有四種基本的消息傳遞模式,它們是:

1. Direct模式:Exchange將消息路由到與Routing Key完全匹配的Queue中。

2. Fanout模式:Exchange將消息路由到所有與其綁定的Queue中。

3. Topic模式:Exchange將消息路由到所有與其綁定的Queue中,同時根據指定的通配符規則進行匹配,實現靈活的消息路由。

4. Header模式:Exchange不使用Routing Key進行消息路由,而是利用消息Header中設置的鍵值對進行路由。

下面是詳細介紹:

Direct模式

在Direct模式中,Exchange將消息路由到與Routing Key完全匹配的Queue中。這種模式下,可以使用RabbitMQ的默認交換機(direct類型),也可以創建自定義的交換機。

在生產者發送消息時,需要將消息指定一個Routing Key,該Routing Key與消費者綁定的隊列名稱相同,Exchange將消息路由到和該Routing Key相同的隊列中,消費者就可以獲取到隊列中的消息了。

Fanout模式

在Fanout模式中,Exchange將消息路由到所有與其綁定的Queue中。這種模式下,只能使用自定義的交換機(fanout類型),Exchange不會考慮Routing Key的情況,直接把消息分發給所有綁定的隊列。

Topic模式

在Topic模式中,Exchange將消息路由到所有與其綁定的Queue中,同時根據指定的通配符規則進行匹配,實現靈活的消息路由。這種模式下,可以使用自定義的交換機(topic類型)。

在生產者發送消息時,需要將消息指定一個Routing Key,而消費者則需要指定一個匹配模式(例如"*.logs"),當Exchange收到消息時,會根據Routing Key和通配符規則來判斷應該將消息發送給哪些隊列。

Header模式

在Header模式中,Exchange不使用Routing Key進行消息路由,而是利用消息Header中設置的鍵值對進行路由。這種模式下,可以使用自定義的交換機(header類型)。

在生產者發送消息時,需要指定一個包含鍵值對的Header,消費者則需要指定一組鍵值對,只有當消息Header中的鍵值對滿足消費者指定的條件時,才會將消息發送給消費者。

在Netcore開發的項目中引入RabbitMQ可以實現應用程序和其他服務之間的異步通信,這種方式可以大大提高系統的可靠性、擴展性和性能。下面給出一個案例來說明引入RabbitMQ的具體應用。

假設我們正在開發一個電商網站,當用戶下單時,需要通知訂單處理系統進行訂單處理和庫存管理。采用傳統同步方式,應用程序會等待訂單處理完成之后才繼續進行,這會降低應用程序的響應速度和吞吐量;另外,如果訂單處理系統出現故障或者繁忙,應用程序也會出現阻塞。而通過引入RabbitMQ,我們可以將訂單信息發送到一個隊列中,然后由訂單處理系統異步地從隊列中獲取訂單信息進行處理,這樣就可以使得應用程序能夠快速響應客戶請求同時保證訂單的處理不被阻塞。如果訂單處理系統出現故障或者繁忙,消息可以在隊列中等待并重試,這樣可以提高系統的可靠性。

以下是一個基于Netcore開發的電商網站采用RabbitMQ異步處理訂單的實現示例:

安裝RabbitMQ.Client

在Netcore項目中,我們可以通過NuGet包管理器安裝RabbitMQ.Client庫來引入RabbitMQ客戶端。

配置RabbitMQ連接信息

在appsettings.json文件中添加RabbitMQ連接信息的配置:

{
"RabbitMQ": {
"HostName": "localhost",
"UserName": "guest",
"Password": "guest",
"VirtualHost": "/"
}
}

創建RabbitMQ服務

創建一個名為RabbitMQService的服務,在這個服務中我們可以封裝一些RabbitMQ方法,比如發送消息到隊列等,具體實現如下:

using RabbitMQ.Client;
using System.Text;
public class RabbitMQService
{
private readonly IConfiguration _configuration;
public RabbitMQService(IConfiguration configuration)
{
_configuration = configuration;
}
public void SendMessage(string queueName, string message)
{
var factory = new ConnectionFactory()
{
HostName = _configuration["RabbitMQ:HostName"],
UserName = _configuration["RabbitMQ:UserName"],
Password = _configuration["RabbitMQ:Password"],
VirtualHost = _configuration["RabbitMQ:VirtualHost"]
};
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queueName, durable: false, exclusive: false, autoDelete: false, arguments: null);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body);
}
}
}
}

創建訂單控制器

在Netcore項目中,我們可以創建一個名為OrderController的控制器,當用戶下單時,控制器通過調用RabbitMQService中的方法將訂單信息發送到一個隊列中,然后立即返回一個成功響應。

[ApiController]
public class OrderController : ControllerBase
{
private readonly RabbitMQService _rabbitMQService;
public OrderController(RabbitMQService rabbitMQService)
{
_rabbitMQService = rabbitMQService;
}
[HttpPost]
public IActionResult CreateOrder(Order order)
{
// 處理訂單邏輯
...
// 發送訂單消息到RabbitMQ
_rabbitMQService.SendMessage("order_queue", JsonConvert.SerializeObject(order));
return Ok("Order created successfully.");
}
}

創建訂單處理服務

創建一個名為OrderProcessingService的服務,用于從隊列中獲取訂單信息,并進行訂單處理和庫存管理等。具體實現如下:

using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
public class OrderProcessingService : BackgroundService
{
private readonly IConfiguration _configuration;
public OrderProcessingService(IConfiguration configuration)
{
_configuration = configuration;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var factory = new ConnectionFactory()
{
HostName = _configuration["RabbitMQ:HostName"],
UserName = _configuration["RabbitMQ:UserName"],
Password = _configuration["RabbitMQ:Password"],
VirtualHost = _configuration["RabbitMQ:VirtualHost"]
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "order_queue",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
var order = JsonConvert.DeserializeObject<Order>(message);
Console.WriteLine($"Order processed: {order.OrderNumber}");
};
channel.BasicConsume(queue: "order_queue", autoAck: true, consumer: consumer);
await Task.Delay(Timeout.Infinite, stoppingToken);
}
}
}

在以上代碼中,我們使用了Netcore中的BackgroundService類來創建一個訂單處理服務。在ExecuteAsync方法中,我們通過創建RabbitMQ連接,然后從隊列中獲取訂單信息,并進行訂單處理。當消息被成功消費后,隊列會自動將消息刪除。

引入RabbitMQ可以實現應用程序和其他服務之間的異步通信,這種方式可以大大提高系統的可靠性、擴展性和性能。特別是在高并發的情況下,使用RabbitMQ可以避免系統響應變慢,提高系統的吞吐量。

責任編輯:姜華 來源: 今日頭條
相關推薦

2024-04-03 11:36:09

KafkaRabbitMQ架構

2024-09-30 09:48:41

RabbitMQ消息中間件

2023-11-08 07:51:11

RabbitMQ接收消息

2012-02-06 09:48:55

紅帽功能

2010-08-02 16:59:54

2024-07-29 08:34:18

C++訂閱者模式線程

2016-11-28 14:40:00

MQTT消息協議

2023-11-20 08:54:38

2024-11-20 15:43:27

2022-11-23 07:30:11

2021-11-03 10:52:39

數據庫

2023-12-04 09:23:49

分布式消息

2009-06-14 17:18:55

ibmdwWebSphereMQ

2025-05-29 01:33:00

微服務架構系統

2024-05-09 08:04:23

RabbitMQ消息可靠性

2024-12-18 07:43:49

2022-07-26 20:00:35

場景RabbitMQMQ

2022-08-02 11:27:25

RabbitMQ消息路由

2020-10-14 08:36:10

RabbitMQ消息

2024-05-23 12:11:39

點贊
收藏

51CTO技術棧公眾號

亚洲精品在线视频观看| 欧美交受高潮1| 日本国产在线播放| 欧美三级中文字幕| 午夜精品久久久久久久男人的天堂| 在线视频91| 你懂的视频欧美| 精品少妇一区二区三区在线视频| 亚洲乱码日产精品bd在线观看| 国产激情综合| 伊人一区二区三区久久精品 | av免费在线观看网站| jizz性欧美23| 欧美绝品在线观看成人午夜影视| 午夜在线视频免费观看| 成人做爰视频www| 欧美日韩国产综合一区二区三区 | 伊人久久99| 国产精品nxnn| 777欧美精品| 久久久无码中文字幕久...| 亚洲日本va中文字幕| 亚洲一区二区三区自拍| 久久久水蜜桃| 无需播放器亚洲| 欧美wwwww| 欧美日韩另类在线| 日韩成人三级视频| 亚洲高清自拍| 欧美最猛性xxxxx(亚洲精品)| 成人好色电影| 国模吧一区二区| 日韩黄色动漫| 日韩精品一卡二卡三卡四卡无卡| 欧美一区二区三区在线看| 欧美伊久线香蕉线新在线| 永久免费在线看片视频| 国产精品激情电影| 欧美日韩视频精品二区| 亚洲成人在线免费| 波多野结衣与黑人| 久久在线视频| 欧美乱大交xxxxx| f2c人成在线观看免费视频| 国产精品久久久免费| 国产欧美在线看| 丁香婷婷成人| 在线视频一区二区三区| 亚洲色图久久久| 久久夜色精品国产噜噜av | 99国产精品免费视频观看| 欧美成人在线影院| 欧美专区福利免费| 色女孩综合影院| 超级白嫩亚洲国产第一| 91精品国产综合久久久久久久| 丁香花高清电影在线观看完整版| 8x8x8国产精品| 中文字幕乱码在线播放| 亚洲国产精品大全| 9色porny自拍视频一区二区| 国产日韩另类视频一区| 激情综合网av| 日韩欧美99| 成人污版视频| 日韩不卡中文字幕| 99精品免费视频| 精品国产免费av| www国产成人| 狠狠色伊人亚洲综合网站色| 欧美成年网站| 亚洲精品视频久久| аⅴ资源新版在线天堂| 精品国产一区二区三区久久久 | 国产精品99久久久久久宅男| 理论片在线不卡免费观看| av今日在线| 欧美系列在线观看| 国产爆初菊在线观看免费视频网站 | 真人做人试看60分钟免费| 亚洲福利精品| 天天干天天操天天干天天操| 久久精品视频在线观看| 欧美日韩亚洲激情| 欧美日韩久久| 欧美 日韩 国产 激情| 欧美亚洲一区二区在线观看| 国产一区二区三区视频在线| 欧美高清视频一区二区三区在线观看| 国产成人在线看| 日本欧美视频在线观看| 国产精品国模在线| 澳门成人av| 国产精品一区二区欧美黑人喷潮水 | caopo在线| 国产成人在线一区二区| 色88888久久久久久影院野外| 日日骚欧美日韩| 最近中文字幕在线| 六月婷婷在线视频| 宅男噜噜99国产精品观看免费| 亚洲乱码国产乱码精品天美传媒| 亚洲bt欧美bt日本bt| 欧美精品做受xxx性少妇| 亚洲国产精华液网站w| 伊人春色之综合网| 97色在线观看免费视频| 亚洲色图视频网| av影片在线| 亚洲综合精品伊人久久| 日本乱码高清不卡字幕| 啪啪亚洲精品| 午夜视频在线观看网站| 91国内产香蕉| 午夜精品久久久久| 国产亚洲精品bv在线观看| 亚欧黄色av| 亚洲国产一区二区三区四区| 免费永久网站黄欧美| 国产女主播在线| 精品久久国产字幕高潮| 久久超碰99| 99re热在线观看| 97se亚洲综合| 欧美激情va永久在线播放| 欧美三级午夜理伦三级中视频| 国产精品女同一区二区三区| 顶级嫩模精品视频在线看| 最新亚洲激情| 国产亚洲女人久久久久毛片| 精品成人一区二区三区四区| 国产精品一区二区三区久久| 免费av网址在线| 小水嫩精品福利视频导航| 欧美一级片中文字幕| 国产一区二区三区av在线| 亚洲黄一区二区| 一本色道久久综合亚洲精品按摩| 国产精品美女久久久久久久| 国产亚洲视频系列| 亚洲福利电影| 你懂的亚洲视频| 极品少妇xxxx偷拍精品少妇| 久久不射2019中文字幕| 成人小电影网站| h短视频大全在线观看| 日本黄大片一区二区三区| 亚洲 日韩 国产第一区| 俺去了亚洲欧美日韩| 成人免费福利视频| 欧美在线一级视频| 中文字幕第一区综合| 亚洲婷婷影院| 超碰97在线免费观看| 亚洲精品久久久久久一区二区| 在线视频日本亚洲性| 亚洲精品乱码久久久久| 99久久婷婷国产| 日韩精品色哟哟| 美女在线视频一区| 欧美精品一区二区三区中文字幕| 成年人在线视频| 99青草视频在线播放视| 日韩视频免费在线播放| 成人动漫在线观看视频| 蜜桃视频一区二区三区在线观看| 免费av网站在线看| av最新网址| 国产无套内射久久久国产| 国产欧美久久久久| caoporn国产精品免费公开| 香蕉影视欧美成人| 福利电影一区二区| 欧美另类z0zxhd电影| 亚洲欧洲在线观看| 欧美三级资源在线| 亚洲成人1234| 宅男在线国产精品| 欧洲人成人精品| 福利视频一区二区| 久久九九国产精品怡红院| 国产精品一区专区欧美日韩| 337p亚洲精品色噜噜狠狠p| 男同在线观看| 第一会所亚洲原创| 国产女主播一区| 亚洲免费中文字幕| 免费成人深夜夜行视频| 成年人视频网站在线| 卡通动漫国产精品| 黄色国产在线| av在线一区不卡| 视频一区二区三区入口| 欧美男人的天堂一二区| 国产精品黄色av| 国产igao激情在线入口| 综合激情网...| 国产女人18毛片水真多成人如厕 | 精品国产一区二区三区2021| 自拍偷拍在线视频|