Easy-DotNET Easy-DotNET
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
npm
  • 简介
  • ORM

    • EFCore
    • Dapper
    • FreeSql
    • SqlSugar
  • 任务调度

    • Hangfire
    • Quartz
    • FluentScheduler
    • Coravel
    • Quartzmin
  • 日志

    • Serilog
    • NLog
    • Log4Net
    • Stackdriver
    • ExceptionLess
  • 身份认证与授权

    • IdentityServer4
    • Identity
    • JWTBearer
    • Auth0
    • OpenIddict
  • Swagger文档

    • Swagger
    • Swashbuckle
    • NSwag
    • ReDoc
  • 对象映射

    • AutoMapper
    • EmitMapper
    • AgileMapper
    • Mapster
  • 消息传递

    • MediatR
    • MassTransit
    • Rebus
    • NServiceBus
      • NServiceBus 概述
        • 消息
        • 终结点
        • 处理程序
        • 传输
      • NServiceBus 快速入门
        • 步骤1:安装 NServiceBus
        • 步骤2:创建一个终结点
        • 步骤3:创建一个消息处理程序
        • 步骤4:创建一个消息类型
        • 步骤5:发送一条消息
        • 步骤6:测试应用程序
      • NServiceBus 高级特性
        • 消息路由
        • 点对点路由
        • 发布/订阅路由
        • 消息序列化
        • 消息重试
      • NServiceBus 应用场景
        • 订单处理系统
        • 实时数据处理系统
        • 聊天应用程序
      • 结论
  • 熔断重试限流

    • Polly
    • Resilience4j
    • AkkaNET
  • 缓存

    • CsRedis
    • FreeRedis
    • EasyCaching
    • StackExchangeRedis
    • CacheCow
    • NCache
    • Memory
  • 注册发现

    • Consul
    • Nacos
    • Apollo
  • 网关

    • Ocelot
    • Kong
    • Traefik
    • Zuul
  • GraphQL

    • GraphQLPlatform
    • GraphQLdotnet
  • 更多

    • NodaTime
    • FluentAssertions
    • Humanizer
    • 爬虫-AngleSharp
    • 邮件-MailKit
  • NET微服务
  • 消息传递
一个大西瓜
2023-04-24
目录

NServiceBus

开源地址

Github:https://github.com/Particular/NServiceBus (opens new window)

NServiceBus 是一个 .NET 消息传递库,可以帮助您构建可靠的、可扩展的消息驱动应用程序。在本文中,我们将深入探讨 NServiceBus 的基本概念、使用方式和实际应用场景。

# NServiceBus 概述

NServiceBus 是一个基于 .NET 平台的消息传递库,可以让开发人员构建高度可靠的消息驱动应用程序。NServiceBus 提供了许多高级功能,包括消息路由、消息重试、事务处理、消息序列化等等。使用 NServiceBus,您可以构建具有高可用性、可伸缩性和可靠性的分布式系统。

NServiceBus 提供了一些核心概念,包括消息、终结点、处理程序和传输。下面我们将分别介绍这些概念。

# 消息

在 NServiceBus 中,消息是应用程序中的基本单元。消息是数据的逻辑包装,它们可以传输到一个或多个接收器,以触发一些操作或响应。每个消息都有一个特定的格式和数据结构。

# 终结点

终结点是消息处理的逻辑位置。每个终结点都有一个唯一的地址,用于标识该终结点的身份。终结点是 NServiceBus 系统中最重要的组件之一。

# 处理程序

处理程序是一个特定类型的组件,负责接收、处理和响应消息。处理程序通常包含一些业务逻辑,用于处理特定类型的消息。

# 传输

传输是 NServiceBus 用来发送和接收消息的通信机制。NServiceBus 支持多种传输方式,包括 MSMQ、RabbitMQ、Azure Service Bus 等。

# NServiceBus 快速入门

现在让我们来看一下如何使用 NServiceBus 构建一个简单的消息驱动应用程序。在这个示例中,我们将创建一个简单的终结点,用于接收消息并将其写入日志。

# 步骤1:安装 NServiceBus

首先,我们需要安装 NServiceBus。NServiceBus 可以从 NuGet 库中获取。打开 Visual Studio 控制台,并使用以下命令安装 NServiceBus:


Install-Package NServiceBus

# 步骤2:创建一个终结点

在安装 NServiceBus 后,我们需要创建一个终结点。在 Visual Studio 中,创建一个新的 .NET Core 控制台应用程序,并将其命名为“SampleEndpoint”。

然后,在 Package Manager Console 中运行以下命令来安装 NServiceBus:


Install-Package NServiceBus.Host -Version 10.1.1

安装完成后,在应用程序根目录打开 Program.cs 文件,并添加以下代码:


using System;
using System.Threading.Tasks;
using NServiceBus;

class Program
{
    static async Task Main()
    {
        var endpointConfiguration = new EndpointConfiguration("SampleEndpoint");
        endpointConfiguration.UseTransport<LearningTransport>();

        var endpointInstance = await Endpoint.Start(endpointConfiguration)
            .ConfigureAwait(false);
        try
        {
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
        finally
        {
            await endpointInstance.Stop()
                .ConfigureAwait(false);
        }
    }
}

这段代码创建了一个名为“SampleEndpoint”的终结点,并使用 LearningTransport 作为传输方式。然后,它启动终结点,并等待用户按下任意键以停止终结点。

# 步骤3:创建一个消息处理程序

现在我们需要创建一个消息处理程序,用于接收消息并将其写入日志。在 Visual Studio 中,创建一个新的类文件,将其命名为“SampleMessageHandler.cs”。

然后,添加以下代码:


using System.Threading.Tasks;
using NServiceBus;
using NServiceBus.Logging;

public class SampleMessageHandler : IHandleMessages<SampleMessage>
{
    static ILog log = LogManager.GetLogger<SampleMessageHandler>();

    public Task Handle(SampleMessage message, IMessageHandlerContext context)
    {
        log.Info($"Received SampleMessage with property '{message.Property}'");
        return Task.CompletedTask;
    }
}

这段代码定义了一个名为“SampleMessageHandler”的消息处理程序,用于处理 SampleMessage 类型的消息。当收到一条 SampleMessage 消息时,它将写入日志。

# 步骤4:创建一个消息类型

现在我们需要创建一个 SampleMessage 类型,用于发送到终结点。在 Visual Studio 中,创建一个新的类文件,将其命名为“SampleMessage.cs”。

然后,添加以下代码:


public class SampleMessage : ICommand
{
    public string Property { get; set; }
}

这段代码定义了一个名为“SampleMessage”的类,它实现了 ICommand 接口。该类有一个名为“Property”的属性,它用于存储消息的数据。

# 步骤5:发送一条消息

现在我们已经准备好了终结点、消息处理程序和消息类型,让我们来发送一条消息到终结点。

在 Program.cs 文件中添加以下代码:


var message = new SampleMessage { Property = "Hello, NServiceBus!" };
await endpointInstance.SendLocal(message)
    .ConfigureAwait(false);

这段代码创建了一条 SampleMessage 消息,并使用 endpointInstance 对象将其发送到本地终结点。

# 步骤6:测试应用程序

现在我们已经完成了应用程序的构建,让我们来测试它是否能够正常工作。按 F5 键来启动应用程序。在应用程序运行时,它将等待用户按下任意键以停止终结点。

在应用程序开始运行后,您应该会看到以下输出:


Press any key to exit

按下任意键,然后在控制台中,您应该会看到以下输出:

INFO NServiceBus.Learning.Transport.LearningTransport [(null)] <(null)> - Message id: dc7a11f6-6365-4008-b170-acd400f6c5c6\1\1 arrived
INFO SampleMessageHandler [(null)] <(null)> - Received SampleMessage with property 'Hello, NServiceBus!'

这表明应用程序已经成功地接收到了一条 SampleMessage 消息,并将其写入日志。

# NServiceBus 高级特性

在本节中,我们将介绍一些 NServiceBus 的高级特性,包括消息路由、消息序列化和消息重试。

# 消息路由

在 NServiceBus 中,消息路由是将消息从发送者路由到接收者的过程。NServiceBus 提供了多种消息路由策略,包括点对点路由、发布/订阅路由、散列路由等。

# 点对点路由

点对点路由是将消息从发送者直接路由到接收者的方式。在这种路由策略中,每个消息都只会被单个接收者处理。

在 NServiceBus 中,点对点路由是默认的路由策略。您可以使用以下代码将消息发送到点对点路由:

await endpointInstance.Send(destinationAddress, message)
    .ConfigureAwait(false);

其中,destinationAddress 参数指定了接收者的地址,message 参数指定了要发送的消息。

# 发布/订阅路由

发布/订阅路由是将消息从发送者路由到多个接收者的方式。在这种路由策略中,每个消息都可以被多个接收者处理。

在 NServiceBus 中,您可以使用以下代码将消息发送到发布/订阅路由:


await endpointInstance.Publish(message)
    .ConfigureAwait(false);

# 消息序列化

在 NServiceBus 中,消息序列化是将消息从一个格式转换为另一个格式的过程。NServiceBus 支持多种消息序列化器,包括 JSON、XML、Protobuf 等。

在 NServiceBus 中,您可以使用以下代码配置消息序列化器:


var endpointConfiguration = new EndpointConfiguration("SampleEndpoint");
endpointConfiguration.UseSerialization<JsonSerializer>();

这将使用 JsonSerializer 作为消息序列化器。

# 消息重试

在 NServiceBus 中,消息重试是在消息无法成功处理时,自动重试消息的过程。NServiceBus 提供了多种消息重试策略,包括指数退避、自定义重试策略等。

在 NServiceBus 中,默认情况下,消息将重试 5 次,每次重试的时间间隔为 10 秒。如果消息在这些重试尝试后仍然无法成功处理,它将被放入错误队列中。

您可以使用以下代码自定义消息重试策略:


var recoverability = endpointConfiguration.Recoverability();
recoverability.Delayed(
    customizations: delayed =>
    {
        delayed.NumberOfRetries(3);
        delayed.TimeIncrease(TimeSpan.FromSeconds(5));
    });

这将将消息重试次数设置为 3 次,每次重试的时间间隔为 5 秒。

# NServiceBus 应用场景

在本节中,我们将介绍一些使用 NServiceBus 的实际应用场景。

# 订单处理系统

订单处理系统是一个常见的应用场景,其中需要处理大量的订单数据。在这种情况下,NServiceBus 可以帮助您构建一个高度可靠、可扩展的订单处理系统。

使用 NServiceBus,您可以将订单数据发送到一个或多个终结点,并使用多个处理程序来处理订单数据。这样,即使其中一个处理程序出现故障,您的订单数据仍然可以被其他处理程序处理。

# 实时数据处理系统

实时数据处理系统是另一个常见的应用场景,其中需要对实时数据进行处理和分析。在这种情况下,NServiceBus 可以帮助您构建一个高度可靠、可伸缩的实时数据处理系统。

使用 NServiceBus,您可以将实时数据发送到一个或多个终结点,并使用多个处理程序来处理数据。这样,即使其中一个处理程序出现故障,您的实时数据仍然可以被其他处理程序处理。

# 聊天应用程序

聊天应用程序是另一个常见的应用场景,其中需要处理大量的实时消息。在这种情况下,NServiceBus 可以帮助您构建一个高度可靠、可伸缩的聊天应用程序。

使用 NServiceBus,您可以将聊天消息发送到一个或多个终结点,并使用多个处理程序来处理消息。这样,即使其中一个处理程序出现故障,您的聊天消息仍然可以被其他处理程序处理。

# 结论

在本文中,我们介绍了 NServiceBus 的基本概念、使用方式和实际应用场景。NServiceBus 是一个强大的 .NET 消息传递库,可以帮助您构建可靠、可伸缩、高可用的消息驱动应用程序。

如果您正在构建一个需要处理大量消息的应用程序,或者需要构建一个高度可靠、可扩展的分布式系统,那么 NServiceBus 绝对值得一试。

上次更新: 2023/04/26, 22:10:06
Rebus
Polly

← Rebus Polly→

Theme by Vdoing | Copyright © 2019-2024 一个大西瓜 | MIT License | 苏ICP备2023013501号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式