1. 程式人生 > >NetSugar.Cap與CAP功能比對

NetSugar.Cap與CAP功能比對

前言

  首先非常感謝開源社群,在各位作者無私得奉獻下,我才有幸接觸CAP。在拜讀原始碼和理解設計原理過程中,發現CAP的原始碼是一個非常值得我們學習的程式碼。本人程式碼的基本框架採用簡單的DDD,在練習Demo中發現開啟事務的時候放在UOW實現,此時不需要ICapPublisher類,但是CAP需要,所以感覺呼叫起來多餘了。還有一點,當我開啟儀表盤的時候,發現儀表盤的定時統計會對資料庫造成一點壓力。由於本人對別人的開源產品不知道怎麼更改,因為沒有在生產環境中使用CAP,發現自己在guthub問的問題有點不清不楚的樣子,也不好意思去向CAP的作者提意見,所以就自己模仿了一個,就這樣NetSugar.Cap

誕生了。

支援對比

  CAP NetSugar.Cap
資料庫儲存對比   測試時為了支援高併發,請把連線池配置大一點
SqlServer 支援 支援
Mysql 支援 支援
PostgreSql 支援 支援
MongoDB 支援 支援
訊息中介軟體對比    
RabbitMQ 支援 支援
Kafka 支援 暫不支援(本人沒使用過Kafka,程式碼已擼但未測試)
DiagnosticListener    
DiagnosticListener 支援 不支援
Dashboard 支援 支援
節點發現 支援 支援

Dashboard對比

  1、CAP當中Dashboard的程式碼與接收端、傳送端都是在同一個程式碼裡面,而NetSugar.Cap的Dashboard與邏輯程式碼是隔離的。在使用上CAP使用只需要引用一個包就足夠了。但是NetSugar.Cap的Dashboard提供了多個數據源的管理,可以配置多個數據源,並且每個資料來源可以單獨的配置讀連線和寫連線,儘可能的減少了開啟後臺之後對業務上使用資料庫的引用。

  2、對一些訊息需要重新處理的處理,兩個都有一個Requeue操作,但是CAP執行Requeue操作時必須引用客戶端業務程式碼,但是NetSugar.Cap則不需要。因為NetSugar.Cap在Dashboard設計上,後臺的一些操作只是產生指令往資料庫插入的,然後等待業務端程式碼定時根據定義的ClientName去查詢對應的需要處理的記錄去處理。當然這裡客戶端程式碼上增加了定時查詢需要執行的指令的開銷。但是指令表與傳送訊息的表是分開的,所以消耗不大。

  3、CAP可以多個數據庫節點通過consul進行統一檢視,但是NetSugar.Cap在一個數據源裡面只能檢視當前資料來源,沒有整合多個數據源的節點,但是可以在多個數據源之間進行隨意切換。

  4、CAP對當日傳送和接收訊息的統計,NetSugar.Cap不支援。

  5、CAP可以儀表盤地址進行動態配置,而NetSugar.Cap只能使用固定地址/CapDashboard/Home

業務程式碼使用對比

  CAP是利用擴充套件IDbConnection(IMongoClient或者其它的)的方法去實現。

  

  NetSugar.Cap是通過ITransactionCoordinator這個事務協調器,往裡面扔對應的事務或者Connection或者自定義實現ITransaction的類。

  

訂閱

  1、CAP同一個專案中,同一個路由只能被一個方法去執行,但是NetSugar.Cap可以被多個訂閱者執行,但是同一個路由一個方法只能執行一次,能被多個方法執行。

  2、方法引數繫結:

    CAP只能有一個引數,但是NetSugar.Cap可以允許你有多個,兩者引數反序列化都是根據Json來反序列化的。

  3、回撥

    CAP執行傳送事件中帶回調方法,但是NetSugar.Cap不支援。NetSugar.Cap建議的是在訂閱方法中傳送一個執行完成的事件。

  4、監聽繫結

    CAP支援Controller和繼承ICapSubscribe的類,介面不行。NetSugar.Cap支援Controller和繼承ICapSubscribe的類和介面。

  5、監聽斷線重連

    NetSugar.Cap Rabbitmq會在網路閃斷之後會自動嘗試重新開啟監聽。

缺陷

  NetSugar.Cap客戶端會定時的向資料庫中T_CapRequeue表查詢資料。T_CapClientNode、T_CapSubscriber重新整理心跳。

  不支援同一個專案中使用兩個資料來源。

寫在最後

  以上對比如有哪些欠缺或者錯誤還麻煩幫忙指出一下。特別是本人對CAP認知還不夠的地方,還請幫忙多指出,免得誤導了各位。NetSugar.Cap是我在學習了CAP程式碼之後寫的,沒有CAP就沒有NetSugar.Cap,非常感謝CAP的作者。想試試NetSugar.Cap的可以參考原始碼中的測試程式碼,NetSugar.Cap的Nuget也已經發布了。支援提意見,不支援吐槽。