搜索分类、视频或标签
#.NET Platform 话题下的全部内容。
共 583 项内容
事务性发件箱模式确保将事件保存在数据存储中,然后再最终推送到消息代理。 如果业务对象和相应的事件保存在同一数据库事务中,则保证不会丢失任何数据。 所有内容都将被提交,或在出错时所有内容回滚。 为了最终发布事件,其他服务或工作进程会在发件箱表中查询未处理项,发布这些事件,并将其标记为已处理。 此模式可确保创建或修改业务对象后不会丢失事件。
EF Core中数据库迁移与初始化的核心概念与实用技巧。内容包括生成与应用迁移脚本、EnsureCreatedAsync与MigrateAsync的使用及冲突解决、通过内部服务实现优雅的自动迁移、EF Core 9.0推荐的异步种子数据初始化方法,以及利用IHostedService或BackgroundService实现耗时操作的异步数据库初始化。通过本课程,开发者将掌握高效管理数据库生命周期的最佳实践,提升项目开发效率与质量。
本次重构优化了事件总线架构,提升了系统的扩展性和灵活性。新增支持包和多个项目,增强了事件处理能力。通过实现基于 Dapr 和 RabbitMQ 的事件总线,改进了消息传递效率。加入了分布式锁功能,确保并发场景下的数据一致性。
在 Host 项目中添加 PostgreSQL 数据库,在最终的应用中引用 PostgreSQL 数据库,添加 PostgreSQL pgAdmin 资源,添加 PostgreSQL pgWeb 资源。
配置显式资源启动,等待资源启动和完成,自定义容器的启动参数,配置容器资源生存期,配置外部参数,外部连接字符串,终结点引用,在 Redis 上启用图形管理扩展,注册生命周期钩子,网络模型和多副本启动。
管理单个项目的依赖项很容易,随着多项目解决方案在规模和复杂性上逐渐增加,管理其依赖项可能会变得困难,在管理许多不同项目的常见依赖项的情况下,可以利用中央包管理 CPM 功能从单个位置轻松完成所有包版本的管理。
在零度框架中使用 TimeProvider 类型,System.TimeProvider 是一种时间抽象,它以 DateTimeOffset 类型的形式提供时间点。 通过使用 TimeProvider,可确保代码可测试且可预测。 TimeProvider 已在 .NET 8 中引入。
重构单元测试,使用 DistributedApplicationFactory 重构分布式测试通用主机,针对不通过测试的代码进行重构,关于内存数据库的共享模式。
将零度框架升级到 Aspire 9.0 版本,包括升级 Visual Studio 开发工具和非 Visual Studio 开发环境的步骤。文章涵盖了安装 .NET Core SDK 9.0、升级 Aspire 工作负载、修改项目文件以支持新版本,以及使用工具简化升级过程。此外,还介绍了服务发现支持 https+http 的新写法。
不同数据库对象的命名约定不同,EF Core 为了适配不同数据库,提供了一些命名约定的配置选项,可使用 Humanizr 库将字符串转换为不同的命名风格,社区对单数和复数表名的争论一直存在,没有统一的标准,但零度推荐使用单数形式,使用自动化命名约定器,规范化迁移历史表。
在最新版的 Visual Studio 中,资源浏览器的体验得到了显著提升,为开发人员带来了更加赏心悦目的界面,使得资源管理的工作流程更为高效。通过对比新旧两种体验,不难发现,我们不仅弥补了以往体验的不足,还引入了众多令人愉悦的新功能,旨在进一步提升您的工作效率。现在,让我们一同开启这段更加现代、便捷的资源管理之旅吧!
使用分布式事件总线在多个微服务之间进行异步通信,订单微服务通知购物车微服务清空用户购物车,产品宽限期校验辅助角色自动任务,订单微服务通知产品微服务进行库存确认,产品微服务通知订单微服务库存确认结果,订单微服务处理库存确认结果。
开源 DistributedLock 是一个 .NET 库,它基于各种底层技术提供强大且易于使用的分布式互斥锁、读写器锁和信号量,零度框架中提供分布式锁的基本抽象,并基于 Dapr 实现了分布式锁。
数据库逻辑复制使用发布和订阅模型, 其中一个或多个订阅者订阅发布者节点上的一个或多个发布,订阅者从他们订阅的发布中提取数据,流复制是一种物理复制方法,它通过将 WAL 记录从一个服务器传输到另一个服务器来复制数据。
在 CQRS 模式的全程是 Command Query Responsibility Segregation,即命令查询职责分离。在 CQRS 模式中,命令和查询是分开实现的,命令负责写操作,查询负责读操作,这样可以更好地实现单一职责原则,同时也可以更好地实现性能优化。
使用 Aspire 启动分布式微服务,包括配置 PostgreSQL 数据库的时间类型为 UTC 时间,删除不优雅的时间转换设置,并推荐使用 TimeProvider 抽象类获取当前时间,以便在测试时更方便地模拟时间。
在 Aspire 构建的云原生应用程序中的启动 RabbitMQ 分布式队列,使用 Aspire 启动 Dapr 边车,使用基于环境变量的密钥存储组件配置 Dapr 组件。
Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。使用 Bundle 离线初始化 Dapr 运行时。
在分布式系统中,不同的组件需要相互通信,通常通过异步消息传递。发件箱模式提供了一种可靠的方法来处理这些消息。它确保即使系统在执行本地事务之后但在发送消息之前发生故障,消息也不会丢失。相反,它会暂时存储在发件箱中,并在系统恢复时检索和发送。
使用自动任务模拟订单支付成功和失败,使用分布式事件实现订单库存变更,发布和订阅模块使微服务能够使用事件驱动架构的消息相互通信。
Dapr 是一个开源的分布式应用程序运行时,发布和订阅模块使微服务能够使用事件驱动架构的消息相互通信,Dapr 提供了一个事件总线的实现,使用 Dapr 发布事件,提供 Dapr 订阅终结点,将消息路由到不同的事件处理程序。
分布式事件总线提供了一种在不同的微服务进程之间消息通信的机制,设计分布式事件总线接口,抽象分布式事件,抽象分布式事件处理程序,分布式事件处理程序的依赖注入,基于 Keyed 服务的依赖注入,使用 JsonExtensionDataAttribute 处理溢出的属性。
本地事件总线是一个轻量级的事件总线,用于在应用程序内部的组件之间传递事件,它是一个简单的观察者模式的实现,用于解耦组件之间的依赖关系, 使得组件之间的通信更加简单,在订单创建处理程序中引发事件,使用不同的处理程序处理订单创建事件。
实现创建命令处理程序,订单相关实体数据存储,使用中间件管道进行事务上下文管理,使用执行策略进行事务失败重试,连接复原能力会自动重试失败的数据库命令。