ABP Framework 7.0 RC 新增功能简介

eb2359ed3b8bd9e8b82b70d0f5a56a32.png
image

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

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

欢迎加入 ABP Framework 研习社,千人学习群(QQ群:726299208),问题解答、经验分享、示例源码、电子书共享,欢迎入住! 

ABP Framework 7.0 新增功能

本版本中的重要特性

  • • .NET 框架升级到 7.0

  • • OpenIddict 升级到 4.0

  • • Dapr 集成

  • • 集成服务

  • • 动态权限和功能

  • • 外部本地化基础设施

  • • 分布式实体缓存服务

  • • Blazor UI 布局钩子

  • • eShopOnAbp项目的改进

.NET 框架升级到 7.0

紧跟 .NET 升级步伐,ABP Framework 解决方案升级到 .NET 7.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 稳定版本。

Dapr 集成

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

ABP 7.0 提供了一些包,可以更好地与 Dapper 集成。我将在下面介绍一些重要的集成。

分布式事件总线集成

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

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

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

8b47eff16814700069ad1799d37d518b.png
image

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

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

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

外部本地化基础设施

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

分布式实体缓存服务

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

public class Product : AggregateRoot<Guid>
{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<Product, Guid>();

然后,只需要注入 IEntityCache<Product, Guid> 服务即可。

public class ProductAppService : ApplicationService
{private readonly IEntityCache<Product, Guid> _productCache;public ProductAppService(IEntityCache<Product, Guid> productCache){_productCache = productCache;}public async Task<ProductDto> GetAsync(Guid id){var product = await _productCache.GetAsync(id);return ObjectMapper.Map<Product, ProductDto>(product);}
}

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

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

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

context.Services.AddEntityCache<Product, ProductDto, Guid>();

会注入 IEntityCache<ProductDto, Guid> 服务代替 IEntityCache<Product, Guid>服务。

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

context.Services.AddEntityCache<Product, ProductDto, Guid>(new DistributedCacheEntryOptions{SlidingExpiration = TimeSpan.FromMinutes(30)}
);

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

Blazor UI 布局钩子

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

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 新增功能介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(原創) 07/28/1982 少女A (中森明菜)

Abstract明菜的第二首單曲&#xff0c;也是她的成名曲&#xff0c;在台灣曾經被歌手嘟嘟翻唱過。 Introduction[hjp2400,300,true]http://oomusou.googlepages.com/shojo_a.flv[/hjp2] 明菜從『少女A』這首單曲才開始竄紅&#xff0c;走的也是可愛路線&#xff0c;招牌的『明菜…

ftp服务

1.ftp工作原理FTP是一个客户机/服务系统。用户通过一个支持FTP协议的客户机程序&#xff0c;连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令&#xff0c;服务器程序执行用户所发出的命令&#xff0c;并将执行的结果返回到客户机。2.安装ftp服务yu…

Spark Streaming高级特性在NDCG计算实践

从storm到spark streaming&#xff0c;再到flink&#xff0c;流式计算得到长足发展&#xff0c; 依托于spark平台的spark streaming走出了一条自己的路&#xff0c;其借鉴了spark批处理架构&#xff0c;通过批处理方式实现了实时处理框架。为进一步了解spark streaming的相关内…

mac触控板 鼠标中键_如何在Windows 10中停止意外的触控板点击(以及其他鼠标增强功能)...

mac触控板 鼠标中键It’s been the bane of laptop users for years: you’re typing away, your palm brushes the trackpad, and the accidental click inserts the cursor in the middle of the text completely screwing things up. Banish the frustration of accidental …

推荐一款 .NET 编写的 嵌入式平台的开源仿真器

Renode 是一个开发框架&#xff0c;通过让你模拟物理硬件系统来加速物联网和嵌入式系统开发。Renode 可以模拟 Cortex-M、RISC-V 等微控制器&#xff0c;不仅可以模拟 CPU指令&#xff0c;还可以模拟外设&#xff0c;甚至可以模拟板载的外设。更强的是&#xff0c;它可以让你在…

Android Bluetooth模块学习笔记

一、蓝牙基础知识 1.蓝牙&#xff08; Bluetooth &#xff09;是一种无线技术标准&#xff0c;可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。蓝牙基于设备低成本的收发器芯片&#xff0c;传输距离近、低功耗。 2.微波频段&#xff1a;使用2.402GGHz到2.480GHz…

sql删除无人借阅的书_查找,下载,借阅,租赁和购买电子书的最佳网站

sql删除无人借阅的书So, you’ve got yourself an eBook reader, smartphone, tablet, or other portable device and you want to put some eBooks on it to take with you. There are many options for obtaining free eBooks as well as purchasing, borrowing, or even ren…

django05:ORM示例--person 增删改查

建立数据库连接后&#xff0c;演示代码 见我的资源 https://download.csdn.net/my

推荐一个开源的 .NET 二维码生成库

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;介绍QrCodeGenerator 是开源的 .NET 二维码生成库&#xff0c;它支持从文本字符串和字节数组生成二维码图片。这个库是基于 .NET Stan…

全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪个更好?

全量更新和增量更新There are few things as irritating as a Blue Screen of Death, but sometimes there is an easy fix for it like updating the BIOS for instance. If multiple updates are available though, do you do incremental updates or can you just use the l…

[Office 2010 易宝典]什么是Office Web App?如何在线查看Office文档?

什么是Office Web App&#xff1f; Office Web App使得Microsoft Office能扩展到网络浏览器上。用户可以直接在通过浏览器在线查看和编辑保存在网站上的文档。 如何上传Office文档&#xff1f; 在Microsoft Word 2010里面&#xff0c;您可以把Word文档保存到Windows Live SkyDr…

Pipy:保护 Kubernetes 上的应用程序免受 SQL 注入和 XSS 攻击

注入攻击在 OWASP Web 应用 10 大安全风险[1] 排名 2021 年下滑至第 3 位&#xff0c;多年来一直位居前十。SQL 注入 (SQLi) 是一种用于攻击网站和 Web 应用程序的常见注入技术。没有将用户输入与数据库命令完全分开的应用程序面临着将恶意输入作为 SQL 命令执行的风险。成功的…

如何阻止YouTube在iOS,Android和Web上自动播放视频

Over at YouTube, they love it when you watch more YouTube. If you’re sick of YouTube automatically queuing up more videos for you, however, it’s easy enough to turn the autoplay feature off and go back to watching your videos at your own pace. 在YouTube上…

(php)thinkphp3.2配置sql_server

(php)thinkphp3.2配置sql_server 标签&#xff1a; php thinkphp sql_server2016年12月16日 15:20:19631人阅读 评论(0) 收藏 举报分类&#xff1a;php&#xff08;18&#xff09; 最近要整一个crm和erp的对接&#xff0c;最坑的是&#xff0c;erp的是用.net写的&#xff0c;数…

Blog.Core 第四季度开源更新说明书

B/C/V/PAn open-source organization based on .NET/Core and Vue (React/NG) to quickly build MVC & SPA and microservice application.开源贡献NETCORE架构设计BCVP开发组成员说&#xff1a;BCVP是以Blog.Core为核心框架设计的一整套前后端分离、RBAC与数据鉴权、统一C…

如何将联系人导入Windows联系人文件夹和从中导出联系人

In Windows 7 and 8, there is a Contacts folder in your user directory. This folder can be useful if you have your contacts in a single .vcf file and want to move them into a .csv file for importing into programs like Outlook 2013. 在Windows 7和8中&#xff…

C# 实例解析事件委托之EventHandler

概述事件属于委托的一个子集&#xff0c;像我们平时界面上的鼠标点击按钮后响应事件、事件的发布和订阅等都需要用到委托.通过委托可以很好的实现类之间的解耦好。事件委托EventHandler的函数原型如下&#xff1a;delegate 表示这个个委托&#xff0c;事件委托没有返回值&#…

多亏了Google相册,如何一键释放Android手机上的空间

Let’s be real here: modern smartphones have limited storage. While they’re coming with a lot more than they used to, it’s easy to fill 32GB without even realizing it. And with today’s high-end cameras, well, pictures and videos can quickly consume a bi…

WPF效果第二百零四篇之自定义更新控件

好久没有更新文章,今天抽空来分享一下最近玩耍的自定义控件;里面包含了自定义控件、依赖属性和路由事件;来看看最终实现的效果:1、先来看看前台Xaml布局和绑定:<Style TargetType"{x:Type Cores:UploadWithProgressControl}"><Setter Property"Templat…

u3d 逐个点运动,路径运动。 U3d one by one, path motion.

u3d 逐个点运动&#xff0c;路径运动。 U3d one by one, path motion. 作者&#xff1a;韩梦飞沙 Author&#xff1a;han_meng_fei_sha 邮箱&#xff1a;313134555qq.com E-mail: 313134555 qq.com 逐个点运动&#xff0c;路径运动。 Im going to do some motion and path. 如果…