- 博客(53)
- 收藏
- 关注
原创 理解 Brighter 管道
Brighter框架采用显式的俄罗斯套娃模型构建请求处理管道,通过属性定义中间件执行顺序。每个中间件像嵌套娃娃一样包裹处理程序,允许在请求前后执行逻辑或提前终止处理。框架提供日志、回退等内置中间件,也支持自定义实现。虽然不提供全局中间件注入,但可通过继承基础处理类实现类似效果。这种基于属性的设计保证了管道的清晰性和可控性,使横切关注点易于管理。开发者既能使用开箱即用的策略,也能灵活创建定制中间件,构建稳健有序的处理流程。
2025-11-28 02:03:39
1003
原创 在 Brighter V10 中使用 MongoDB
本文介绍了如何使用Brighter框架结合MongoDB实现收件箱(Inbox)和发件箱(Outbox)模式。主要内容包括:1)配置MongoDB作为消息持久化存储,确保可靠投递;2)集成Kafka消息代理进行消息生产消费;3)通过分布式锁避免重复发布;4)实现请求处理器处理命令和事件,并演示重试机制。该方案为.NET应用提供了构建弹性分布式系统的简洁方案,确保故障时优雅降级和数据一致性。
2025-11-24 09:00:00
611
原创 从 .NET 到 Elixir:初探 Phoenix 框架
摘要:本文比较了.NET开发者学习Elixir时接触的Phoenix框架与ASP.NET Core的异同。Phoenix作为Elixir生态的主流Web框架,采用Plug作为HTTP抽象层(类似.NET中间件),通过管道组织请求处理流程,其函数式编程风格使控制器逻辑更清晰。作者指出Phoenix在实时功能(如LiveView)方面表现突出,并分析了.NET与Elixir生态差异:前者由微软主导,后者更依赖开源社区。文章最后预告将演示用Phoenix构建API的实践教程.
2025-11-21 09:00:00
772
原创 用 Brighter V10 结合 Kafka 和 PostgreSQL 实现收件箱模式
本文介绍了如何使用Brighter框架结合PostgreSQL和Kafka实现收件箱模式(Inbox Pattern),以构建可靠的事件驱动微服务。文章首先回顾了Brighter的核心概念(命令/事件、消息映射器和请求处理器),然后详细讲解了通过FluentBrighter和原生API两种方式配置Kafka消息代理和PostgreSQL收件箱存储的具体步骤。文中提供了完整的示例代码,包括消息定义、处理器实现以及故障处理机制,展示了如何利用收件箱模式确保分布式系统中消息的精确一次处理和优雅恢复。该方案通过Br
2025-11-17 09:00:00
747
1
原创 Trupe:在 .NET 中实现 Actor 模型
本文探讨了在C#中实现基础Actor模型框架的过程。作者通过构建核心组件(包括Actor接口、消息传递系统、邮箱队列和Actor进程)来理解Actor模型的底层机制。框架采用最小依赖设计,支持类型安全的消息处理和高性能的ChannelMailBox实现。虽然该实现仅提供了基本功能(如本地消息传递和顺序处理),但为理解更高级特性(如远程通信、监管策略等)奠定了基础。文章展示了简单示例代码,并建议参考Proto.Actor和Akka.NET等成熟框架来扩展功能。这个教学性项目旨在帮助开发者深入理解Actor模型
2025-11-15 00:59:26
950
1
原创 迁移指南:从 Brighter V9 升级到 V10
本文详细介绍了从Brighter V9升级到V10的关键迁移步骤。主要变更包括:1) DI注册方式调整,新增AddConsumers和AddProducers方法替代原有AddServiceActivator;2) 收件箱/发件箱配置移至相应方法内;3) 消息映射器接口新增Publication参数和RequestContext属性;4) 发件箱表结构变更,需新增多个字段;5) 推荐将核心组件注册为Scoped或Transient。文章提供了新旧版本代码对比示例,并建议从DI配置开始逐步迁移,最后强调需重点
2025-11-10 09:00:00
884
原创 使用 Inbox 模式实现幂等性
本文探讨了Inbox模式在分布式系统中的应用,该模式与Outbox模式协同确保消息可靠处理。文章首先介绍了三种消息投递语义(最多一次、至少一次和恰好一次),重点分析了"至少一次"投递面临的重复消费和毒丸问题。Inbox模式通过在数据库中持久化消息并检查重复,实现了幂等消费,能有效解决上述问题。虽然该模式会带来性能开销和架构复杂性,但对关键业务保障价值显著。文中推荐了相关实现工具,并强调Inbox模式是构建弹性事件驱动系统的重要组件。
2025-11-07 09:00:00
883
原创 宣布 Brighter V10 发布:支持 CloudEvents、新增多种提供程序并增强弹性能力的重大版本
BrighterV10正式发布,带来多项重大更新:1)原生支持CloudEvents规范提升互操作性;2)新增默认JSON消息映射器简化开发;3)集成消息调度器支持延迟处理;4)强化Polly弹性管道API;5)扩展云平台支持包括MongoDB、GCP、RocketMQ等。重要变更包括:不再支持.NET6,同步/异步API分离,使用专用类型替代字符串,简化DI配置。部分包已重命名或弃用。该版本标志着Brighter向现代化、云原生方向的重要演进。
2025-11-03 09:00:00
672
原创 Brighter 框架中的异常处理
Brighter消息处理异常机制解析 本文澄清了Paramore.Brighter框架中常见的异常处理误区。Brighter默认会在未处理异常时确认消息,而非重试。文章通过RocketMQ集成示例,演示了两种实现失败重试的方法:1)在处理器中使用try-catch并抛出DeferMessageAction;2)通过[FallbackPolicy]中间件实现全局错误处理。重点强调中间件方案因其关注点分离优势更受推荐,并提供了完整代码示例。该机制适用于需要精确控制消息重试逻辑的.NET8+应用场景。
2025-10-03 09:00:00
982
原创 Brighter:将MySQL发件箱迁移到V10
本文介绍了将MySQL发件箱迁移到Brighter V10的详细流程。首先说明了所需的.NET环境和NuGet包依赖,包括专门为MySQL实现的发件箱存储组件。文章详细讲解了发件箱表结构创建、依赖注入配置、清理器和归档器设置等关键步骤,并特别强调了V10版本中发件箱改为单例服务的重要架构变化。最后指出了V9到V10的表结构变更和数据库配置调整,提醒开发者注意事务管理策略的调整。迁移后,应用将获得更好的性能和更完善的分布式跟踪支持。
2025-09-08 09:00:00
887
原创 Fluent.Brighter:Brighter V10 的全新配置方式
本文介绍了Fluent.Brighter——一个简化Brighter消息框架配置的Fluent API包。针对Brighter原生配置复杂难用的问题,该包通过链式调用提供了更直观的配置方式,支持RabbitMQ等消息中间件。文章演示了如何使用Fluent.Brighter配置RabbitMQ订阅和发布,包括统一连接设置、自动扫描注册组件等功能。该方案保留了Brighter的全部功能,同时显著降低了学习曲线,特别适合.NET 8+环境开发。最后提供了GitHub上的完整实现示例和贡献指南。
2025-09-04 19:44:35
662
原创 Brighter V10:迁移Postgres外箱
本文介绍了Brighter V10中对Outbox模式的重大重构,重点包括PostgreSQL配置指南和版本差异。主要内容:1. Outbox模式通过将消息存入数据库表并由独立进程处理,确保分布式系统的可靠消息传递;2. 详细说明了PostgreSQL表结构创建、服务配置和Sweeper设置步骤;3. 对比V9和V10的关键差异:单例实现、数据类型变更(如MessageId改为varchar)及新增支持分布式跟踪的列;4. 提供完整示例代码,展示如何创建订单处理系统并实现原子消息发布。新版本通过标准化改进互
2025-08-25 09:00:00
843
原创 Brighter V10: 搭配 AWS SNS/SQS V4
本文介绍了如何将Brighter V10与AWSSDK v4集成,重点说明了AWSSDK v4的新特性(异步支持、依赖注入优化等)以及Brighter提供的两个AWS集成包(分别支持v3和v4)。文章详细演示了AWSSNS/SQS配置步骤,包括连接设置、SQS订阅和生产者的配置方法,并强调Brighter V10与AWSSDK v4集成能构建高效、可扩展的消息解决方案,同时保持平滑的迁移路径。
2025-08-22 09:00:00
870
原创 使用Brighter V10和Quartz.NET进行消息调度
Quartz.NET与Brighter集成实现企业级调度 摘要:本文介绍了如何将Quartz.NET调度器集成到Brighter消息系统中。Quartz.NET提供持久化作业存储、集群支持和复杂触发器等功能,弥补了Brighter内置调度功能的不足。集成步骤包括:1)通过NuGet添加必要包依赖;2)在DI容器中配置Quartz.NET;3)将Quartz调度器注册到Brighter。最终实现支持精确时间控制的消息调度,包括相对时间(TimeSpan)和绝对时间(DateTimeOffset)两种调度方式。
2025-08-18 09:00:00
1588
原创 Brighter V10 RC2:消息网关
BrighterRC2消息网关重大变更摘要 BrighterRC2对消息网关进行了重大优化,主要包括:1) 方法重命名以提高清晰度(AddServiceActivator→AddConsumer,ExternalBus→AddProducers);2) 显式默认消息映射器配置,取消了云事件辅助方法;3) 引入强类型标识符(Id、RoutingKey等)提升类型安全性;4) 订阅配置增强,强制关键属性并提供多类型订阅支持;5) 发布功能增强,支持默认头信息和CloudEvent属性。这些变更显著提高了组件的清
2025-08-15 09:00:00
467
原创 Brighter V10 Release Candidate 2 新特性详解
Brighter V10RC2发布,带来多项重要更新:支持AWS SDK v4/v3双版本兼容,新增RocketMQ官方集成,完善RabbitMQ Quorum队列支持,采用UUIDv7提升数据库性能。优化了弹性管道(Polly v8)集成,增强动态分区键和消息头管理,新增发件箱断路器功能。修复了ID生成、关系型发件箱、RabbitMQ优雅关闭等关键问题。该版本在保持RC1功能基础上显著提升稳定性和性能,为即将发布的V10正式版奠定基础。
2025-08-11 09:00:00
718
原创 使用Brighter V10和Hangfire进行消息调度
文章摘要:本文介绍了如何在Brighter V10中集成Hangfire调度器,实现可靠的消息调度功能。Brighter支持多种调度方式,但Hangfire因其持久化存储、监控仪表板和重试机制成为生产环境理想选择。文章详细说明了配置步骤,包括注册Hangfire到DI容器、设置Brighter调度器工厂,以及使用TimeSpan或DateTimeOffset参数调度消息。重点强调了生产环境必须使用持久化存储(如PostgreSQL或SQLServer),并利用Hangfire仪表板进行监控。该集成方案结合了
2025-07-28 09:45:00
1670
原创 Brighter V10:使用 PostgreSQL 作为轻量级消息网关
摘要:Brighter V10 RC1新增PostgreSQL消息网关支持,适用于轻量级应用和原型开发。通过.NET 8+和NuGet包Paramore.Brighter.MessagingGateway.Postgres等实现集成,支持自动建表和ACID事务。配置包括连接设置、订阅和生产者注册,核心概念涉及消息定义(Command/Event)和处理器。优势在于简化架构和快速原型设计,但高吞吐场景建议使用Kafka/RabbitMQ。示例代码展示了服务激活、消息发布和处理流程。
2025-07-25 09:00:00
753
原创 迁移至 Brighter V10 并集成 Microsoft SQL Server
本文介绍了如何迁移到Brighter V10版本进行MSSQL Server集成,重点讲解了配置变更和破坏性更新。主要内容包括:1) 项目要求.NET 8+及必要NuGet包;2) Brighter基础知识回顾(命令/事件处理);3) SQL Server配置步骤(创建队列表、连接设置、订阅配置);4) V10主要破坏性变更(消息映射器重构、订阅属性重命名、显式消息泵类型);5) 发布配置变更。新版本通过内置JSON序列化和更清晰的API简化了SQL集成,同时保持了灵活性。
2025-07-23 09:00:00
654
原创 迁移到 Brighter V10:Kafka 配置更新与突破性变更
**摘要:**本文指导如何迁移到Brighter V10,重点介绍Kafka配置变更和突破性更新。环境要求.NET 8+及相关NuGet包。Brighter基础包括请求定义、消息映射器和处理器。Kafka配置涵盖连接参数、主题订阅和事件发布。V10新增CloudEvents支持,优化默认值,简化JSON序列化,变更订阅配置和生产者设置。建议优先使用Post而非PostAsync提升吞吐量。V10通过改进清晰性和集成体验,需调整现有代码逻辑。
2025-07-21 09:00:00
988
原创 使用 AWS SNS/SQS 迁移到 Brighter V10
本文介绍了迁移到Brighter V10的关键步骤,重点聚焦AWSSNS/SQS配置变更与破坏性更新。V10版本带来直接SQS支持、FIFO队列兼容和LocalStack集成等增强功能。文章详细说明了环境要求、核心概念,并对比了V9与V10在消息映射器、订阅模型和发布模型等方面的变更。迁移步骤包括更新消息映射器、明确通道类型、采用新生产者模型等。针对FIFO场景,文章特别强调了分区键的设置方法。完整示例代码可在GitHub仓库获取。
2025-07-18 09:00:00
952
原创 Brighter V10 与 RabbitMQ 迁移指南
本文详细介绍了从Brighter迁移到V10版本的关键步骤,重点讲解了RabbitMQ配置变更和破坏性更新。主要内容包括:1) 版本要求(.NET8+)和必要NuGet包;2) Brighter核心概念回顾(命令/事件、消息映射器、请求处理器);3) 同步与异步API的选择(RMQ.Sync使用V6同步API,RMQ.Async使用V7异步API);4) RabbitMQ连接配置、订阅和生产者配置方法;5) V10版本的主要破坏性变更(包名变更、消息映射器重构、订阅/发布配置变更等);6) 迁移建议(优先使
2025-07-14 09:00:00
928
原创 Brighter V10 RC1 正式发布:新特性、破坏性变更及后续计划
Brighter V10RC1预览版发布,带来重大改进与未来架构基础。主要更新包括:默认消息映射器支持JSON/CloudEvents格式、全面集成CloudEvents标准、新增内存级调度功能、完整MongoDB支持及RabbitMQ V7客户端适配。破坏性变更涉及异步接口重构、映射器升级、类型优化和DI注册调整。未来版本将扩展对JustSaying、MassTransit等框架的适配,新增RocketMQ集成和GCP服务支持。该版本平衡创新与兼容性,为构建更健壮的分布式系统奠定基础。
2025-07-11 09:00:00
471
原创 Elixir 中的状态管理:进程、Agent 与 GenServer 实践
摘要:Elixir通过BEAM虚拟机的设计实现状态管理,采用进程和不可变数据模型。主要方法包括:1) 递归循环创建状态持有进程;2) Agent模块简化共享状态;3) GenServer提供完整行为模式,支持同步/异步操作。这些方案分别适用于不同场景,从简单状态到复杂并发系统均可覆盖,体现了Elixir基于Actor模型的并发编程范式。(149字)
2025-06-27 10:30:00
308
原创 使用 SQLite 和 Brighter 实现发件箱模式
摘要:本指南展示如何用.NET8和SQLite结合Brighter库实现发件箱模式,确保数据库更新与消息发布的事务一致性。通过处理CreateNewOrder命令,在事务成功时发布OrderPlaced和OrderPaid事件,失败时回滚。关键点包括:使用DepositPostAsync将消息存入事务性发件箱、SQLite表结构配置、IUnitOfWork事务管理实现,以及OutboxSweeper提供的容错机制。该方案保证了消息仅在事务成功时发送,并通过后台轮询处理失败消息,实现了可靠的系统解耦架构。
2025-06-23 09:00:00
927
原创 Proto.Actor 中的 EventStream 详解:简化 Actor 之间的发布/订阅通信
Proto.Actor的EventStream实现了发布/订阅模式,允许Actor订阅特定事件类型。示例展示了OrderActor发布订单创建事件,PaymentActor订阅该事件并维护待支付订单列表。通过EventStream.Subscribe()方法注册事件类型,实现Actor间的松耦合通信。EventStream还支持DeadLetter处理等基础设施事件,适用于事件溯源、监控等场景。该机制有效解耦了Actor间的交互,提高了系统扩展性。
2025-06-20 09:00:00
800
原创 使用 MySQL 和 Brighter 实现出站箱模式
本文介绍了如何使用Brighter库在MySQL和.NET8中实现Outbox模式,确保数据库更新与消息发布的事务一致性。主要内容包括:1)项目架构概述,处理CreateNewOrder命令并发布OrderPlaced和OrderPaid事件;2)关键实现细节,通过DepositPostAsync将消息与业务数据存储在同一事务中;3)MySQL集成方案,包括表结构设计和事务管理实现;4)错误处理机制,当业务规则冲突时自动回滚事务。该方案通过Brighter的IMySqlTransactionConnecti
2025-06-16 09:00:00
649
原创 Cloud Events:事件驱动架构的未来标准化
Brighter项目V10引入对CloudEvents规范的原生支持,致力于解决分布式系统间的互操作性难题。CloudEvents由云原生计算基金会(CNCF)制定,通过标准化事件格式和元数据,消除了异构系统集成的障碍。该规范定义了必填和可选属性,支持二进制(元数据与数据分离)和结构化(自包含事件)两种传输模式,可适配不同协议需求。这一集成标志着事件驱动架构迈向标准化的重要一步,开发者无需再构建复杂适配器即可实现跨平台通信,显著提升了分布式系统的健壮性和扩展性。
2025-06-13 10:15:00
987
原创 在Brighter中通过PostgreSQL实现出站箱模式
本文探讨将SQLServer的Outbox模式适配到PostgreSQL的实现方案,使用.NET8、Brighter和PostgreSQL确保订单创建与事件发布的事务一致性。通过CreateNewOrderHandler处理订单创建,并发布OrderPlaced和OrderPaid事件。文章详细介绍了PostgreSQL出站箱表的配置、消息映射器的实现及请求处理器设计,同时指出当前Brighter在PostgreSQL集成上的局限性:缺乏异步支持和严格事务保证。虽然适用于中等吞吐量场景,但对高可靠性需求仍推
2025-06-09 09:00:00
964
原创 明:CQRS 在 Elixir 中的实验
《Ming:一个融合CQRS模式的Elixir实践项目》摘要这个项目通过构建Ming库探索Elixir的函数式编程特性,将C# Brighter框架的CQRS模式移植到Elixir生态。项目采用处理器模块处理命令/事件,通过路由器实现分发,并支持中间件扩展。命名"Ming"(明)兼顾发音便利与中文特色,体现跨文化设计理念。该项目展示了Elixir宏的强大代码生成能力,同时利用OTP实现健壮的命令处理器。未来将完善文档、扩展消息处理功能并加强测试覆盖,为开发者提供融合两种语言优势的实践范例。项目地址见Git
2025-06-06 09:00:00
673
原创 .NET 中的事务消息传递:将 Brighter 的出站箱模式与 SQL Server 和 RabbitMQ 集成
摘要:本文详细介绍了在SQLServer中实现Brighter出站箱模式的方案,确保订单创建与消息发布的事务一致性。通过.NET8+和容器化环境(SQLServer/RabbitMQ),系统使用DepositPostAsync将OrderPlaced和OrderPaid事件写入同一数据库事务。关键实现包括:1)创建OutboxMessages表结构;2)配置Brighter的MsSqlOutbox和事务管理;3)使用IUnitOfWork共享事务上下文。当订单金额能被3整除时模拟业务异常,验证事务回滚机制
2025-06-02 09:00:00
1011
原创 Brighter 的线程模型:为何专用线程驱动异步消息泵
摘要:本文详解Brighter消息泵的配置与线程模型设计。通过调整noOfPerformers参数可扩展消息泵实例数量,其采用专用线程而非线程池的抢占式多任务处理,确保线程安全与性能可预测性。前摄器模式通过自定义SynchronizationContext维护线程亲和性,解决异步I/O与线程局部状态的矛盾。该设计平衡了同步/异步处理的可靠性,避免线程池饥饿问题。核心优势体现在显式线程管理、确定性控制及扩展灵活性上。
2025-05-31 09:00:00
629
原创 Brighter 与发件箱模式:实现弹性系统的至少一次消息交付
本文探讨了Brighter框架如何原生支持发件箱模式(Outbox Pattern)以解决分布式系统中的事务一致性问题。发件箱模式通过将消息与业务数据在同一事务中持久化,由后台进程异步投递消息,确保数据库更新与消息发布的原子性。Brighter默认提供内存发件箱,也支持PostgreSQL等外部存储,通过Deposit和ClearOutbox两阶段机制实现可靠消息传递。该模式避免了分布式事务(2PC),保证至少一次交付,并解耦系统组件,是微服务通信的关键技术。后续将深入Brighter的发件箱提供者实现和高
2025-05-26 09:00:00
1424
原创 使用 Proto.Actor 构建 TCP 服务器:探索 .NET 中的 Actor 模型
本文介绍了如何使用Proto.Actor框架构建一个复杂的TCP服务器,通过三个Actor分别处理连接、字节接收和数据处理。核心Actor包括WaitForTcpConnectionActor、ReceiveBytesActor和ProcessActor,分别负责监听连接、接收字节流和反序列化数据。文章详细说明了如何配置Actor系统、实现TCP监听、处理连接、接收字节、反序列化数据以及资源清理。此外,还探讨了Actor监督机制、消息弹性、生命周期管理等核心概念,并提供了生产环境中的优化建议。通过这个示例,
2025-05-23 09:00:00
1015
原创 Brighter 与 Redis/Valkey:配置与使用教程
Redis是一个高效的内存数据结构存储系统,常用于消息代理、缓存或数据库。通过Paramore.Brighter.MessagingGateway.Redis包,可以实现与Redis的集成,支持.NET 8或更高版本的项目。集成步骤包括配置Redis连接、订阅队列以及发布事件。Brighter框架通过定义请求、消息映射器和请求处理器来处理消息。虽然Redis集成提供了高性能的消息传递,但需注意ServiceStack.Redis的授权限制和当前不支持Redis Streams的问题。未来版本计划增加对Red
2025-05-19 09:00:00
848
原创 事件驱动架构 vs 事件溯源:差异解析
事件驱动架构(EDA)和事件溯源(Event Sourcing)是两种不同的技术概念,尽管它们都涉及“事件”,但目的和应用场景各异。EDA是一种软件架构范式,通过事件解耦服务间的通信,提升系统的扩展性和容错性。它允许服务通过发布和消费事件(如OrderPaid)来异步交互,从而减少服务间的直接依赖和单点故障风险。事件溯源则是一种数据管理策略,专注于通过不可变事件序列记录应用状态的所有变化,支持状态的审计、回放和历史查询,适用于需要高数据一致性和历史追溯的系统,如金融和版本控制。尽管两者解决的问题不同,但它们
2025-05-16 09:00:00
1238
原创 Brighter 与 RabbitMQ 集成指南
RabbitMQ 是一种广泛使用的消息代理,基于 AMQP 协议,适用于分布式系统,具备高可扩展性和容错能力。在 .NET 8 或更高版本中,可以通过 NuGet 包 Paramore.Brighter.MessagingGateway.RMQ 等实现 RabbitMQ 集成。Brighter 框架通过命令、事件、消息映射器和请求处理器等核心概念,简化消息处理流程。配置 RabbitMQ 时,需设置连接信息、订阅队列/主题,并配置生产者。最佳实践包括使用死信队列(DLQ)、监控和错误处理机制。通过 Brig
2025-05-12 09:00:00
648
原创 Ecto 与 Elixir 集成:数据库交互入门指南
Ecto 是 Elixir 的数据库封装器和查询生成器,专为 PostgreSQL、MySQL 等关系型数据库设计。映射数据库表到 Elixir 结构体(通过 Schema)使用 Elixir 语法生成类型安全的查询通过变更集(Changeset)在持久化前验证数据通过版本控制的迁移管理数据库模式演进。
2025-05-09 09:00:00
1803
原创 Brighter 与 Azure 服务总线集成指南
Azure 服务总线是一个完全托管的企业级消息代理,可促进云环境和混合环境中应用程序与服务之间的可靠通信。它支持消息队列(点对点通信)和发布-订阅主题(向多个消费者广播),非常适合解耦分布式系统。通过 Paramore.Brighter.MessagingGateway.AzureServiceBus 包,Brighter 提供了与 Azure 服务总线的一流集成,使 .NET 应用程序中的命令/事件路由更加无缝。
2025-05-05 09:00:00
543
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅