Brighter V10:迁移Postgres外箱

在 Brighter 10 版本中,最重大的变更之一是对 outbox 实现的全面重构。在本文中,我将解释版本 9 和 10 之间的关键差异、为什么需要这些变更,并提供如何使用 PostgreSQL 配置新 outbox 模式的清晰指南。

什么是 Outbox 模式?

Outbox 模式是分布式系统中确保可靠消息传递同时保持数据一致性的关键技术。应用程序不是直接将消息发布到消息系统,而是将消息存储在数据库表("outbox")中。然后,一个独立的后台进程("sweeper")会可靠地将这些消息传递到消息系统。

需求

.NET 8 或更高版本
包含以下 NuGet 包的 .NET 项目

Brighter 概念回顾

在继续讨论 Postgres outbox 配置之前,让我们回顾一下关于 Brighter 的基础知识。

请求(命令/事件)

使用 IRequest 定义消息:

public class OrderPlaced() : Event(Id.Random())
{
    public string OrderId { get; set; } = string.Empty;
    public decimal Value { get; set; }
}
  • 命令(Commands): 单接收者操作(例如,SendEmail
  • 事件(Events): 广播通知(例如,OrderShipped

消息映射器(可选)

在 Brighter 消息和应用程序对象之间进行转换,默认情况下 Brighter 将使用 JSON 序列化器

public class OrderPlacedMapper : IAmAMessageMapper<OrderPlaced>, IAmAMessageMapperAsync<OrderPlaced>
{ ... }

请求处理器

处理传入的消息:

public class OrderPlaceHandler(ILogger<OrderPlaceHandler> logger) : RequestHandler<OrderPlaced>
{
    public override Greeting Handle(Greeting command)
    {
        logger.LogInformation("{OrderId} placed with value {OrderValue}", command.OrderId, command.Value);
        return base.Handle(command);
    }
}

如何在 Brighter 中使用 Outbox

在配置 outbox 之前,了解如何与其交互非常重要

通过 Outbox 发布消息

Brighter 提供了 DepositPostAsync 方法将消息存储在 outbox 中

await commandProcessor.DepositPostAsync(
    new OrderPlaced { OrderId = "ORD-123", Value = 99.99m }, 
    cancellationToken: cancellationToken);

当您调用 Brighter 中的标准 `PostAsync` 方法时,如果已配置,它会自动使用 outbox 模式。框架会处理:

  • 将消息存入 outbox 表
  • 通过配置的 sweeper 处理消息</
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值