MassTransit一個優秀的.NET訊息(事件)匯流排框架

1 前置閱讀

在閱讀本文章之前,你可以先閱讀:

RabbitMQ入門

什麼是觀察者模式

什麼是事件匯流排

如何使用RabbitMQ實現事件匯流排

2 簡介

MassTransit 是一個自由、開源、輕量級的訊息匯流排, 用於使用。 NET 框架建立分散式應用程式。MassTransit 在現有訊息傳輸上提供了一組廣泛的功能, 從而使開發人員能夠友好地使用基於訊息的會話模式非同步連線服務。基於訊息的通訊是實現面向服務的體系結構的可靠和可擴充套件的方式。

3 使用

首先

,將MassTransit的NuGet軟體包安裝到您的應用程式中。

MassTransitMassTransit。RabbitMQ

然後

,建立具體事件源類。

///

/// 具體事件源類/// public class SendedEvent{ public string Name { get; private set; } public SendedEvent(string name) { Name = name; }}

接著

,建立具體事件處理類,預設繼承IConsumer<>介面。

///

/// 具體事件處理類顧客A/// public class CustomerASendedEventHandler : IConsumer{ public Task Consume(ConsumeContext context) { Console。WriteLine($“顧客A收到{context。Message。Name}通知!”); return Task。CompletedTask; }}/// /// 具體事件處理類顧客B/// public class CustomerBSendedEventHandler : IConsumer{ public Task Consume(ConsumeContext context) { Console。WriteLine($“顧客B收到{context。Message。Name}通知!”); return Task。CompletedTask; }}

最後

,客戶端呼叫。

static void Main(string[] args){ var bus = Bus。Factory。CreateUsingRabbitMq(sbc => { sbc。Host(“rabbitmq://localhost”); sbc。ReceiveEndpoint(“test_queue”, ep => { ep。Consumer();// 訂閱 ep。Consumer(); }); }); bus。Start(); var sendedEvent = new SendedEvent(“優惠”); Console。WriteLine($“商店發了{sendedEvent。Name}通知!”); bus。Publish(sendedEvent);// 釋出 Console。ReadKey(); // press Enter to Stop bus。Stop();}

讓我們來看看輸出結果:

商店釋出優惠通知!顧客A收到優惠通知。顧客B收到優惠通知。

4 ASP.NET Core 使用

首先

,將MassTransit的NuGet軟體包安裝到您的應用程式中。

MassTransitMassTransit。RabbitMQMassTransit。AspNetCore

然後

,建立具體事件源類

///

/// 具體事件源類/// public class SendedEvent{ public string Name { get; private set; } public SendedEvent(string name) { Name = name; }}

接著

,建立釋出者程式碼:

往Startup。ConfigureServices中增加以下程式碼

services。AddMassTransit(x =>{ x。UsingRabbitMq();});services。AddMassTransitHostedService();

2。建立HomeController,釋出事件

using EventBus。MassTransit。Events;using MassTransit;using Microsoft。AspNetCore。Mvc;using System。Threading。Tasks;namespace EventBus。MassTransit。Producer。WebApi01。Controllers{ [Route(“[controller]”)] [ApiController] public class HomeController : ControllerBase { private readonly IPublishEndpoint publishEndpoint; public HomeController(IPublishEndpoint publishEndpoint) { this。publishEndpoint = publishEndpoint; } [HttpPost] public async Task Post() { await publishEndpoint。Publish(new SendedEvent(“優惠”)); return Ok(); } }}

接著

,建立訂閱者程式碼:

建立具體事件處理類

///

/// 具體事件處理類顧客A/// public class CustomerASendedEventHandler : IConsumer{ public Task Consume(ConsumeContext context) { Console。WriteLine($“顧客A收到{context。Message。Name}通知!”); return Task。CompletedTask; }}/// /// 具體事件處理類顧客B/// public class CustomerBSendedEventHandler : IConsumer{ public Task Consume(ConsumeContext context) { Console。WriteLine($“顧客B收到{context。Message。Name}通知!”); return Task。CompletedTask; }}

往Startup。ConfigureServices中增加以下程式碼

services。AddMassTransit(x =>{ x。AddConsumer(); x。AddConsumer(); x。UsingRabbitMq((context, cfg) => { cfg。ReceiveEndpoint(“event-listener”, e => { e。ConfigureConsumer(context); e。ConfigureConsumer(context); }); });});services。AddMassTransitHostedService();

最後

,執行Post()方法,在訂閱者專案中跟蹤會輸出:

顧客A收到優惠通知。顧客B收到優惠通知。