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.pswp.cn/news/280893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280893.shtml
英文地址,請注明出處:http://en.pswp.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 7的AOT原理簡析

楔子上節了解AOT和CLR的區別&#xff0c;這節來稍微深入看下AOT的原理是什么&#xff1f;原理其實 AOT 的原理非常簡單&#xff0c;為啥呢&#xff1f;因為微軟又回歸了傳統&#xff0c;搞起來Obj目標文件和Link連接器。當年的VC就是這么弄的。AOT的編譯實際上是圍繞這兩個東西…

垂直居中及容器內圖片垂直居中的CSS解決方法

方法一: <style type"text/css"> <!-- * {margin:0;padding:0} div { width:500px; height:500px; border:1px solid #666; overflow:hidden; position:relative; display:table-cell; text-align:center; vertical-align:middle } div p …

Django04: ORM配置與使用MySQL數據庫

配置&#xff1a; 1.手動創建數據庫。 create database testDB 2. 在Django項目的settings.py文件中&#xff0c;配置數據庫連接信息&#xff1a; DATABASES {"default": {"ENGINE": "django.db.backends.mysql","NAME": "你…

推薦一款 .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

C#如何用正則表達式截取https和帶端口的域名

如題。現有代碼如下。只能截取 http://www.baidu.com的 www.baidu.com當域名為https://www.baidu.com 或者為 http://www.baidu.com:8080 時 則無法正確讀取。。求高手給去能截取這樣格式的代碼 Thanks!string p "http://[^\.]*\.(?<domain>[^\.]*)";Regex r…

推薦一個開源的 .NET 二維碼生成庫

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具和組件&#xff0c;希望對您有用&#xff01;介紹QrCodeGenerator 是開源的 .NET 二維碼生成庫&#xff0c;它支持從文本字符串和字節數組生成二維碼圖片。這個庫是基于 .NET Stan…

vue循環中的v-show

v-show如果使用循環對象的屬性來時控制, 這個屬性必須是加載時就存在的 <div class"list-group col-sm-12" v-for"(issue,index) in issue_list"><a click"switch_comments(issue, index)" style"background-color:#5cb85c;font-w…

C# 圖片畫矩形,添加文字

1.初始設置字體與筆 Pen pen new Pen(Color.FromArgb(220, Color.Green), 5);Font font new Font("微軟雅黑", fontSize, FontStyle.Bold); // 定義字體Brush whiteBrush new SolidBrush(Color.FromArgb(220, Color.Red)); // 畫文字用 2.初始設置圖片和Graphics …

全量更新和增量更新_增量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…

BZOJ4590: [Shoi2015]自動刷題機

【傳送門&#xff1a;BZOJ4590】 簡要題意&#xff1a; 有l秒時間&#xff0c;AC了k道題&#xff0c;給出每秒寫的代碼行數&#xff08;行數>0表示寫&#xff0c;<0表示刪除&#xff0c;如果剩下的行數不夠刪&#xff0c;則為0&#xff09;&#xff0c;假設行數>n時能…

[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 命令執行的風險。成功的…

docker 開啟命令\退出容器

開啟 docker load -i test.tar docker imagesdocker run -it -p 8000:80 test //8000為訪問ip 的端口 80 為test設置的端口 docker rename 原容器名 新容器名訪問IP 為 localhost:8000 退出容器 如果要正常退出不關閉容器&#xff0c; 請按CtrlPQ進行退出容器