• 分享一款老牌的.NET分布式消息总线框架
  • 发布于 1个月前
  • 60 热度
    0 评论
MassTransit 是 .NET 老牌的分布式消息总线,这是一个免费的、开源的.NET 分布式框架,在 github 上拥有 6.2k 的 star。

MassTransit的出现是为了解决分布式系统中应用程序之间通信的挑战。在现代软件开发中,分布式架构越来越普遍,不同的服务或模块需要进行异步通信以实现松耦合的系统设计。MassTransit 可以简化这一复杂任务,让开发者能够专注于业务逻辑而不是底层通信细节。

功能特性
1.消息路由
基于强类型的发布/订阅和自动代理拓扑配置。
2.异常处理
引发异常时,可以重试、重新传递消息或将消息移至错误队列
3.可观察性
基于 Open Telemetry (OTEL) 的分布式追踪的支持。
4.消息调度
使用延迟传输、Quartz.NET 和 Hangfire 传送消息。
5.Sagas 和状态机
可靠、持久、事件驱动的工作流程编排。

使用示例
下面是一个使用内存的消息总线,当然您可以替换成 RabbitMQ 或者其他消息组件。
在项目中添加一个 Worker.cs, 代码如下:
namespace GettingStarted;

using System;
using System.Threading;
using System.Threading.Tasks;
using Contracts;
using MassTransit;
using Microsoft.Extensions.Hosting;

public class Worker : BackgroundService
{
    readonly IBus _bus;
    // 堆代码 duidaima.com
    public Worker(IBus bus)
    {
        _bus = bus;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            await _bus.Publish(new GettingStarted { Value = $"The time is {DateTimeOffset.Now}" }, stoppingToken);

            await Task.Delay(1000, stoppingToken);
        }
    }
}
在 Program.cs 底部的 ConfigureServices 方法中注册
services.AddHostedService<Worker>();
创建消费者,添加一个 GettingStartedConsumer.cs 的文件,代码如下
namespace GettingStarted.Consumers;

using System.Threading.Tasks;
using Contracts;
using MassTransit;
using Microsoft.Extensions.Logging;

public class GettingStartedConsumer :
    IConsumer<GettingStarted>
{
    readonly ILogger<GettingStartedConsumer> _logger;

    public GettingStartedConsumer(ILogger<GettingStartedConsumer> logger)
    {
        _logger = logger;
    }

    public Task Consume(ConsumeContext<GettingStarted> context)
    {
        _logger.LogInformation("Received Text: {Text}", context.Message.Value);
        return Task.CompletedTask;
    }
}
运行程序后,会输出下面的内容, 代表消费者已经收到并处理了消息。
Building...
info: MassTransit[0]
      Configured endpoint Message, Consumer: GettingStarted.MessageConsumer
info: MassTransit[0]
      Bus started: loopback://localhost/
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /Users/chris/Garbage/start/GettingStarted
info: GettingStarted.MessageConsumer[0]
      Received Text: The time is 3/24/2021 12:02:01 PM -05:00
info: GettingStarted.MessageConsumer[0]
      Received Text: The time is 3/24/2021 12:02:02 PM -05:00
项目地址:https://masstransit.io
用户评论