AbpVnext 分散式事件匯流排

来源:https://www.cnblogs.com/Tamper/archive/2022/07/15/16481846.html
-Advertisement-
Play Games

AbpVnext 本地事件匯流排 補充知識 發佈訂閱 概念 應用場景 本地事件匯流排允許服務發佈和訂閱進程內事件,這意味著如果兩個服務>(發佈者和訂閱者)在同一個進程中運行,那麼它是合適的 完整示例 DDD開發規範: 先定義好介面層、後實現層、暴露介面 對於要更新的實體 //領域層的實體 public ...


AbpVnext 本地事件匯流排

補充知識

發佈訂閱

概念

應用場景

本地事件匯流排允許服務發佈和訂閱進程內事件,這意味著如果兩個服務>(發佈者和訂閱者)在同一個進程中運行,那麼它是合適的

完整示例
DDD開發規範: 先定義好介面層、後實現層、暴露介面

對於要更新的實體

//領域層的實體
public class Book : FullAuditedEntity<Guid>, IHasExtraProperties, IMultiTenant
{
   public string Name{get;set;}

   public string Author {get;set;}

   public long Price {get;set}
   
   public string Title {get;set;}

   public string Classify{get;set;}

   //條形碼
   public string BarCode {get;set;}
   // 出版商
   public string Issue{get;set;}
   // 頁數
   public string PageTotal{get;set;}
  
   public string BuyerId{get;set;}

   public DateTime? ModifyTime{get;set}
}
//這個實體是必須有的
public class BookRecordEto{

    public string Name{get;set;}

    public string Author {get;set;}

    public long Price {get;set}

    public DateTime? ModifyTime{get;set}
}
//發佈事件
public class BookService: ITransientDependency
{
    //Abp使用了字典來保存對實例的引用
    public IAbpLazyServiceProvider LazyServiceProvider { get; set; }

    //按需註入
    protected ILocalEventBus  LocalEventBus => LazyServiceProvider.LazyGetRequiredService<ILocalEventBus >(); 

    //倉儲--對應Book的資料庫表
    protected IBookRepository BookRepository => LazyGetRequiredService<IBookRepository>();

    public async Task UpdateData(Guid id)
    {
        var book =  await BookRepository.FindAsync(x=>x.Id = id);
        if (book == null){//不存在實體}
        var updateEntity = await BookRepository.UpdateAsync(book);
        if (updateEntity == null){//更新失敗}
        
        //實體數據發生變更,發佈事件
        await LocalEventBus.PublishAsync(new BookEto(){
            Name = book.Name;
            Author = book.Author;
            Price = book.Price;
            ModifyTime = DateTime.Now;
        });
    } 
}
//訂閱事件
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus;
public class EventBusHandler: ApplicationService,
      , ILocalEventHandler<BookRecordEto> 
      , ITransientDependency
{
    // 進行業務數據更新,比如要更新購買這邊書讀者記錄
    public IAbpLazyServiceProvider LazyServiceProvider{get;set;}
 
    protected IBookBoughtRecordRepository BoughtRecordRepository => LazyServiceProvider.LazyGetRequiredService<IBookBoughtRecordRepository>();

    [UnitOfWork]//這個特性以及方法頭裡面的virtual很重要
    public async virtual Task HandleEventAsync(BookRecordEto eventData)
    {
        //獲取購買記錄
        var record =  await  BoughtRecordRepository.GetQueryableAsync();

        var recordList = await AsyncExecuter.ToListAsync(record);
        
        if(recordList.Count() != 0){

            var boughtRecord  = ObjectMapper.Map(eventData, new BoughtRecord());
            //插入一條數據
            await BoughtRecordRepository.InsertAsync(boughtRecord);
        }
    }
}

總結


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄導航 分支控制 - if.....else 單分支 if 雙分支 if....else 多分支 if....else if.....else switch - 分支控制 switch (表達式){case 常量1: 語句1; breack:} -- 語法 breack 退出當語句,如果沒有bra ...
  • likeshop單商戶開源商城系統,公眾號商城、H5商城、微信小程式商城、抖音小程式商城、位元組小程式商城、頭條小程式商城、安卓APP商城、蘋果APP商城代碼全開源,免費商用。 適用場景 系統適用於B2C,單商戶,自營商城場景。完美契合私域流量變現閉環交易使用。 系統亮點 LikeShop在電商通用組 ...
  • 一、前言 在項目中有需要對word進行操作的,可以看看哈,本次使用比較強大的spire組件來對word進行操作,免費版支持三頁哦,對於不止三頁的word文件,可以購買收費版,官網:https://www.e-iceblue.cn/tutorials.html#,也可使用其他組件實現,如poi、doc ...
  • MongoDB聚合查詢 什麼是聚合查詢 聚合操作主要用於處理數據並返回計算結果。聚合操作將來自多個文檔的值組合在一起,按條件分組後,再進行一系列操作(如求和、平均值、最大值、最小值)以返回單個結果。 MongoDB的聚合查詢 ​ 聚合是MongoDB的高級查詢語言,它允許我們通過轉化合併由多個文檔的 ...
  • 一、字元串 1、字元串編碼發展: 1)ASCII碼: 一個位元組去表示 (8個比特(bit)作為一個位元組(byte),因此,一個位元組能表示的最大的整數就是255(二進位11111111 = 十進位255)) 2)Unicode:兩個位元組表示(將各國的語言(中文編到GB2312,日文編到Shift_JI ...
  • JetBrAIns RubyMine 2022 for Mac是應用在Mac上的一款強大的Ruby代碼編輯器,可以通過可定製的配色方案,鍵盤方案以及高效開發所需的所有外觀設置,智能導航一鍵導航到聲明,超級方法,測試,用法,實現,是一款功能強大的代碼編輯工具。 詳情:JetBrains RubyMin ...
  • 本文主要介紹crudapi三種API認證方式,基於Spring Security框架實現, 包括Cookie,Basic Auth,JWT令牌Token。 ...
  • 1.mybatis攔截器介紹 攔截器可在mybatis進行sql底層處理的時候執行額外的邏輯,最常見的就是分頁邏輯、對結果集進行處理過濾敏感信息等。 public ParameterHandler newParameterHandler(MappedStatement mappedStatement ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...