经过数年的专注开发,Brighter V10 正式发布!
虽然我们将在未来几个月内继续支持 Brighter V9(甚至可能延续到明年或更久),但此次发布标志着 Brighter 发展历程中的一个重要里程碑。V11 的规划可能将在来年启动,但眼下,让我们先深入了解 V10 带来了哪些新特性。
V10 有哪些新功能?
Brighter V10 引入了一系列强大的新功能与集成,旨在简化您的开发流程。
CloudEvents 支持
Brighter V10 现在默认采用 CloudEvents 规范。通过自动设置标准化的事件头信息,显著提升了跨服务和跨平台的互操作性,使您的分布式系统更加健壮且不依赖特定厂商。
默认消息映射器
使用 JSON 时,您不再需要编写自定义消息映射器。Brighter 内置了标准 JSON 序列化的默认消息映射器。此外,还专门提供了用于 CloudEvents JSON 格式的映射器,简化了与符合 CloudEvents 规范平台的集成。
集成消息调度器
延迟消息处理现在成为一等公民。Brighter V10 引入了全新的消息调度器,并原生支持主流调度后端,包括 Quartz.NET、Hangfire 和 AWS Scheduler。现在,只需一行代码即可安排命令在未来执行:
processor.Post(TimeSpan.FromSeconds(10), new SomeCommand());
Polly 弹性管道集成
我们通过集成 Polly 最新的 [弹性管道 API Resilience Pipeline API,全面升级了弹性能力。这为您配置重试、熔断器、超时等策略提供了更强大、更灵活的方式,适用于命令与事件处理。
services.AddBrighter(opt =>
{
var resiliencePipelineRegistry = new ResiliencePipelineRegistry<string>();
resiliencePipelineRegistry.AddBrighterDefault();
// ...
opt.ResiliencePipelineRegistry = resiliencePipelineRegistry;
});
增强的可空引用类型支持
我们在整个代码库中大幅改进了可空引用类型(Nullable Reference Types)的注解,使在启用可空特性的项目中编写更安全、更可预测的代码成为可能。
扩展的提供程序支持
我们显著扩展了 Brighter 的集成生态,新增了多个一流(first-class)提供程序支持:
- MongoDB:全面支持将 MongoDB 用作 Inbox、Outbox 以及分布式锁。
- RocketMQ:原生支持 RocketMQ 消息网关。
- PostgreSQL:支持使用 Postgres 作为消息网关。
- Google Cloud Platform (GCP):全面支持 GCP,包括:
- AWS SDK V4:新增对最新版 .NET AWS SDK(V4)的支持,相关包以 V4 后缀命名,与现有的 V3 支持并行提供。
- 增强的 AWS 支持:
- 改进的 LocalStack 兼容性:修复了已知问题,本地开发体验更流畅;
- 高级 SQS/SNS 功能:新增对直接发布到 SQS 以及 SNS/SQS FIFO(先进先出)主题和队列的支持。
- RabbitMQ:支持 RabbitMQ 客户端 V7 及 Quorum Queue。
破坏性变更(Breaking Changes)
作为一次主版本更新,V10 包含若干破坏性变更,旨在提升库的长期健康度与易用性。
不再支持 .NET 6
Brighter V10 现在面向 .NET 8、.NET 9.0 和 .NET Standard 2.0。根据微软的支持策略,我们已移除对 .NET 6 的支持(其长期支持 LTS 窗口已结束)。要升级到 Brighter V10,您必须更新项目的 Target Framework。
同步与异步 API 明确分离
为提供更清晰、更显式的 API,我们对同步与异步接口进行了分离。现在您将看到带有 Async 和 Sync 后缀的独立接口。
例如:消息映射器 IAmAMessageMapper 现仅用于同步映射,而新增的 IAmAMessageMapperAsync 接口用于异步操作。请更新您的自定义映射器,实现相应的接口。
减少“基本类型沉迷”(Primitive Obsession)
为提升类型安全性和领域清晰度,我们将关键概念(如 ID、分区键)从基本类型(如 string)替换为专用类型(如 Id、PartitionKey 等)。为便于迁移,我们已实现从 `string` 到这些新类型的隐式转换。
额外福利:在 .NET 9+ 上运行时,新的 Id.Random() 方法默认生成 UUID v7。
Microsoft 依赖注入配置变更
依赖注入的设置流程已得到简化。我们引入了更流畅、更直观的 API,用于在 `IServiceCollection` 中配置 Brighter 服务:
// V9
services.AddServiceActivator(opt =>
{
opt.Subscriptions = /* ...订阅配置... */;
opt.ChannelFactory = new ChannelFactory(connection);
})
.UseExternalBus(new SnsProducerRegistryFactory(...).Create());
// V10
services.AddConsumers(opt =>
{
opt.Subscriptions = /* ...简化的订阅配置... */;
opt.DefaultChannelFactory = new ChannelFactory(connection);
})
.AddProducers(opt =>
{
opt.ProducerRegistry = new CombinedProducerRegistryFactory(
new SnsMessageProducerFactory(...),
new SqsMessageProducerFactory(...)
).Create();
});
请查阅我们的文档以了解新的注册方法。
包重命名与弃用
重命名的包:
- Paramore.Brighter.MessagingGateway.RMQ → Paramore.Brighter.MessagingGateway.RMQ.Sync
- Paramore.Brighter.Extensions.Hosting → Paramore.Brighter.Outbox.Hosting
- Paramore.Brighter.*.Dapper → Paramore.Brighter.Dapper
- Paramore.Brighter.Tranformers.AWS → `Paramore.Brighter.Transformers.AWS(修正拼写)
已弃用的包(V10 起不再支持):
- Paramore.Brighter.MessagingGateway.RESTMS
- Paramore.Brighter.Outbox.EventStore
操作要求:如果您的项目依赖上述已弃用的包,请在我们的 GitHub 仓库中提交 issue 以进一步讨论。
结语
Brighter V10 是一次重大飞跃,全面拥抱现代 .NET 实践与云原生标准。通过引入 CloudEvents、默认消息映射器,以及对 MongoDB、GCP 和 RocketMQ 等平台的扩展支持,Brighter 正变得更强大、更灵活。
我们非常期待您试用 V10,并欢迎您的反馈!
如需详细的迁移指南和文档,请访问我们的 GitHub 仓库。
1027

被折叠的 条评论
为什么被折叠?



