热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ABPFramework7.0RC新增功能简介

原标题:ABPFramework7.0RC新增功能简介

原标题:ABP Framework 7.0 RC 新增功能简介

image

ABP Framework 在架构上有四大目标:模块化、DDD、多租户和微服务。从文章来源地址48563.html 7.0 更新的功能来看,其侧重点转向微服务场景的实现,比如:Dapr 集成、动态权限和功能、外部本地化、分布式实体缓存服务,都是对微服务和分布式架构所提出的解决方案。

ABP Framework 已然在成为优雅的 .NET 微服务基础设施道路上开始狂奔!

欢迎加入 ABP Framework 研习社,千人学习群(QQ群:72629文章来源地址48563.html9208),问题解答、经验分享、示例源码、电子书共享,欢迎入住!
转载出处:https://www.cnblogs.com/YGYH/p/16921860.html (编程悟道)


ABP Framework 7.0 新增功能

本版本中的重要特性


  • .NET 框架升级到 7.0

  • OpenIddict 升级到 4.0

  • Dapr 集成

  • 集成服务

  • 动态权限和功能

  • 外部本地化基础设施

  • 分布式实体缓存服务

  • Blazor UI 布局钩子

  • eShopOnAbp项目的改进


.NET 框架升级到 7.0

紧跟 .NET 升级步伐,ABP Framework 解决方案升级到 .NET www.yii666.com7.0

OpenIddict 升级到 4.0

OpenIddict 4.0 预览版于2022年6月22日发布,在 ABP 7.0 中 OpenIddict Nuget包引用升级到 4.0-preview。一旦 OpenIddict 4.0 最终版本发布,也会立即同步升级到稳定版本,并计划使 ABP 7.0 最终版使用 OpenIddict 4.0 稳定版本。

阅读 OpenIddict 4.0 preview1 is out 了解 OpenIddict 4.0 新功能。


Dapr 集成

Dapr,分布式应用程序运行时,提供API简化微服务开发。ABP 和 Dapr 有一些相互交叉的功能和特性,如服务对服务通信分布式消息总线分布式锁定。需要注意的是:ABP 和 Dapr 目的是不同的。ABP 目标是提升端到端开发体验,例如:框架提供的客户端与服务器端动静态代理、服务器端远程服务调用,极大地提升了开发体验;而 Dapr 目的是提供一个运行时,将常见的微服务通信模式与应用程序逻辑进行解耦。

ABP 7.0 提供了一些包,可以更好地与 Dapper 集成。我将在下面介绍一些重要的集成注意事项,但如果您想获得 ABP Dapr 集成的全面概述,请参阅ABP Dapr集成文档。

分布式事件总线集成

ABP 分布式事件总线系统允许应用程序通过事件进行异步通信,系统提供了抽象层,扩展友好可以基于不同的通信技术来实现,前面的版本已经提供基于 RabbitMQ、Kafka、Rebus、Azure Service Bus 的实现。

本版本新增 Volo.Abp.EventBus.DaprVolo.Abp.AspNetCore.Mvc.Dapr.EventBus 包,使 ABP 分布式事件总线有了基于 Dapr 基础设施的实现。Volo.Abp.EventBus.Dapr包用于发布事件Volo.Abp.AspNetCore.Mvc.Dapr.EventBus 包用于订阅事件

C# API 客户端代理集成

ABP可以生成动态或静态代理类,实现从 .NET 客户端应用程序调用 HTTP API。

Volo.Abp.Http.Client.Dapr 包用于配置客户端代理系统,以方便地使用 Dapr 服务来调用构建块,实现应用程序之间的通信。

分布式锁

ABP 提供分布式锁定来控制多个应用程序对共享资源的访问。Volo.Abp.DistributedLocking.Dapr 包使 ABP 使用 Dapr 分布式锁构建块。

ABP 7.0 提供选项类 AbpDistributedLockOptions 来配置分布式锁,可以指定任何名称作为锁前缀。


集成服务

集成服务用来将为模块间(或微服务间)通信而构建的应用服务为用户界面或客户端应用程序使用的应用程序服务进行区分。

在 ABP 7.0 中,可以使用 [IntegrationService] 特性(在 Volo.Abp.Application.Services 命名空间中定义)将应用服务标记为集成服务。例子:

[IntegrationService]
public class ProductAppService : ApplicationService, IProductAppService
{
// ...
}

如果对应用服务定义了接口,比如 IProductService,还可以在服务接口上使用:

[IntegrationService]
public interface IProductAppService : IApplicationService
{
// ...
}

使用特性标记的服务,ABP 将按照约定执行以下操作:


  • 如果使用 自动创建API控制器 特性,URL前缀将是 /integration-api/ 而不是 /api/。通过这种方式,就可以在微服务系统中阻止 API网关 对集成服务 API 的调用,并且不授权这些服务。在自动创建API控制器时,还可以使用 ConventionalControllerSetting 对象 ApplicationServiceTypes 选项设置是否包含集成服务。

  • 默认情况下,对集成服务的调用不会被审计日志记录,因为其作用是供其他服务使用。可以在 AbpAuditingOptions 选项类中将 IsEnabledForIntegrationServices 设置为true,为集成服务启用审计日志记录。


动态权限和功能

在 ABP Framework 中,权限和功能在项目中通过代码定义。基于此设计,在不同微服务中定义权限(或功能)以及在单独应用中对所有权限进行集中管理,变得很困难。为了实现权限管理,需要一个单独的微服务,并添加所有微服务的服务契约项目引用,以知道所有微服务的权限(和功能)并管理它们。www.yii666.com因此,只要任何一个微服务的权限发生变化,就需要重新部署权限管理微服务

7.0 中,我们引入动态授权和动态功能系统。参看如下图:

image

微服务1中定义权限 AB,在微服务2中定义权限C D E ,在微服务中通过引用权限类库,直接将权限信息写入到授权管理数据库中。通过权限管理微服务提供权限管理UI管理用户的所有权限。

ABP 7.0 的解决方案中,所有微服务都序列化自己的权限定义,并在应用程序启动时将它们写入权限管理共享数据库(使用高度优化的算法)。另一方面,权限管理服务可以动态地从数据库获取这些权限定义(也经过了高度优化,以减少数据库的使用),并允许UI为用户或角色显示和管理它们。这些操作都是在框架内自动工作的。

如果你想知道为什么做出这些决定以及解决了什么问题,可以参看 分布式和微服务系统的授权解决方案 。


外部本地化基础设施

本地化是微服务系统中的另一个问题,当每个微服务定义了自己的本地化文本,在构建一个统一的UI应用程序时,实现 IExternalLocalizationStore 来获得其他服务的本地化。

目前 ABP Framework 没有提供动态本地化的模块 。如果我们从社区得到大量的请求,后面可能会添加到的开源计划中,大家一起来投票 #13953 ,推动早点实现。

分布式实体缓存服务

在 7.0 中 ABP 引入了分布式实体缓存服务。假设有一个 Product 实体,实际上是一个聚合根:

public class Product : AggregateRoot
{
public string Name { get; set; }
public string Description { get; set; }
public float Price { get; set; }
public int StockCount { get; set; }
}

希望使用缓存来提高访问产品的速度。首先应该在模块类的 ConfigureServices 方法中配置依赖注入来注册 IEntityCache服务:

context.Services.AddEntityCache();

然后,只需要注入 IEntityCache 服务即可。

public class ProductAppService : ApplicationService
{
private readonly IEntityCache _productCache;
public ProductAppService(IEntityCache productCache)
{
_productCache = productCache;
}
public async Task GetAsync(Guid id文章来源站点https://www.yii666.com/)
{
var product = await _productCache.GetAsync(id);
return ObjectMapper.Map(product);
}
}

示例代码中,假设将对象映射配置为从 Product 映射到 ProductDto

在这里,直接缓存了 Product 对象。在这种情况下,Product 类必须是可序列化的,因为在分布式缓存中被序列化为JSON格式保存。

在某些情况下,可能希望使用另一个类来存储缓存数据。例如,对于缓存对象,可能希望使用 ProductDto 类而不是 Product 类。在这种情况下,更改依赖注入配置如下:

context.Services.AddEntityCache();

会注入 IEntityCache 服务代替 IEntityCache 服务。

可以通过将 DistributedCacheEntryOptions 对象传递给 AddEntityCache 方法来配置缓存的持续时间:

context.Services.AddEntityCache(
new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(30)
}
);

默认的缓存持续时间是2分钟,使用 AbsoluteExpirationRelativeToNow 配置。

该 PR 中包含关于分布式实体缓存的附加说明。


Blazor UI 布局钩子

布局钩子系统允许你向布局的某些特定部分添加代码,ABP 框架提供的所有主题布局都实现了布局钩子。

如果你想在Blazor应用程序中使用布局钩子,可以阅读 Blazor UI: Layout Hooks 文档,并查看所需的配置。


eShopOnAbp 项目的改进

在这个版本中,eShopOnAbp 项目进行了以下改进:


  • 集成 Keycloak ,一个开源的身份和访问管理系统,作为身份验证服务器,而不是内置的身份验证服务器(基于IdentityServer或OpenIddict)。

  • 产品详情页面使用 CMS Kit 评级和评论功能(模块复用)。


ABP Framework 学习路径



  • 快速入门:《ABP Framework 极速开发》

  • 系统掌握:《精读 Mastering ABP Framework》


历史版本更新说明



  • ABP Framework 6.0.1 新增功能和重要变更

  • ABP Framework 5.3.0 版本新增功能和变更说明

  • ABP Framework 5.2 RC 新增功能

  • ABP Framework 5.0 RC.1 新特性和变更说明

  • ABP Framework V4.4 RC 新增功能介绍

来源于:ABP Framework 7.0 RC 新增功能简介


推荐阅读
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • HTML5大文件传输技术深度解析与实践分享
    本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 在Java应用程序中调用`response.getStatus()`方法时遇到了`NoSuchMethodError`异常,经过分析,初步判断为依赖冲突问题。通过检查项目依赖树发现,当前项目版本与某些库的版本不兼容,导致该方法无法被正确识别。建议通过更新相关依赖版本或使用依赖管理工具(如Maven或Gradle)来解决此问题,确保所有依赖项版本一致且兼容。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 本文深入探讨了在Android应用开发中常见的相机连接故障问题,特别是在RK3288平台和Android 6.0系统上。通过分析具体案例,本文提供了详细的解决方案和应对策略,旨在帮助开发者有效解决相机连接问题,提升应用的稳定性和用户体验。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 本文探讨了在Lumen框架中实现自定义表单验证功能的方法与挑战。Lumen的表单验证机制默认返回无状态的JSON格式API响应,这给初学者带来了一定的难度。通过深入研究Validate类,作者分享了如何有效配置和使用自定义验证规则,以提升表单数据的准确性和安全性。 ... [详细]
  • 利用ViewComponents在Asp.Net Core中构建高效分页组件
    通过运用 ViewComponents 技术,在 Asp.Net Core 中实现了高效的分页组件开发。本文详细介绍了如何通过创建 `PaginationViewComponent` 类并利用 `HelloWorld.DataContext` 上下文,实现对分页参数的定义与管理,从而提升 Web 应用程序的性能和用户体验。 ... [详细]
author-avatar
x将臣x
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有