Newbe.Claptrap 框架入門,第二步 —— 建立專案
接上一篇 Newbe.Claptrap 框架入門,第一步 —— 開發環境準備 ,我們繼續瞭解如何建立一個 Newbe.Claptrap 專案。
Newbe.Claptrap 是一個用於輕鬆應對併發問題的分散式開發框架。如果您是首次閱讀本系列文章。建議可以先從本文末尾的入門文章開始瞭解。
安裝專案模板
開啟控制檯執行以下命令來安裝最新的專案模板:
dotnet new --install Newbe.Claptrap.Template |
安裝完畢後,可以在安裝結果中檢視到已經安裝的專案模板。
建立專案
選擇一個位置,建立一個資料夾,本示例選擇在 D:\Repo
HelloClaptrap
的資料夾。該資料夾將會作為新專案的程式碼資料夾。
開啟控制檯,並且將工作目錄切換到 D:\Repo\HelloClaptrap
。然後執行以下命令便可以創建出專案:
dotnet new newbe.claptrap --name HelloClaptrap |
通常來說,我們建議將
D:\Repo\HelloClaptrap
建立為 Git 倉庫資料夾。通過版本控制來管理您的原始碼。
啟動專案
接下來,我們使用命令列啟動專案。將命令列切換到 C:\Repos\HelloClaptrap\HelloClaptrap
tye run |
啟動之後可以在 tye dashboard 上檢視到專案模板包含的所有專案:
tye dashboard 的地址通常為 http://localhost:8000, 若埠被佔用將自動使用其他埠,可以檢視命令列上的提示,以得到當前具體的地址。
我們可以在如上圖所示的介面上找到 helloclaptrap-webapi
服務的執行地址。例如,上圖所示,其終結點地址為 http://localhost:14285。
因此,我們使用瀏覽器開啟該地址,以檢視 swagger 介面。
在 swagger 頁面上,嘗試呼叫/AuctionItems/{itemId}/status
服務返回 200 說明當前服務各個元件已經正常啟動。
體驗專案
使用專案模板建立的專案實際上是一個模擬拍賣競價業務的程式。
拍賣競價是一個典型的可能具有併發請求需要處理的業務場景。使用 Newbe.Claptrap 可以很簡單的解決該問題。後續的文件中我們將連續使用該業務場景進行演示,因此,此處進行一下簡單的業務場景說明。
業務規則
業務規則大致如下:
- 每個拍賣品由一個唯一的
itemId
- 拍賣品只能在一段時間內進行競價拍賣
- 拍賣品有一個起始拍賣價格
- 所有的競拍者都擁有一個唯一的
userId
- 競拍者在拍賣時間段內可以無限次對拍賣品進行出價,只要其出價大於當前最高出價,即可算作有效出價,併成為該拍賣品目前的得標人
- 需要記錄所有成功出價的詳細情況,包括出價時間,出價額,出價人。
拍賣品的狀態如下:
0 Planned
等待開拍1 OnSell
正在拍賣2 Sold
已經拍出3 UnSold
流拍
API 設計
為了最簡單的演示效果,本樣例設計了以下這些 API :
GET /AuctionItems/{itemId}/status
獲取指定拍賣品當前的競價狀態GET /AuctionItems/{itemId}
獲取指定拍賣品的詳細資訊POST /AuctionItems
對指定的拍賣品進行出價
下面我們使用一個簡單的場景來體驗一下這些 API 的效果。
尋找當前在拍的拍賣品
由於拍賣品的狀態受到時間的影響,為了讓開發者可以在任何時候都可以找到各種狀態的拍賣品,專案中使用了一些基於時間的演算法,來生成所有狀態的拍賣品。
開發者可以使用 0/1/2/3 四個 itemId 呼叫 GET /AuctionItems/{itemId}/status
獲取拍賣品當前的狀態。
其中至少存在一個狀態為 1 OnSell
的拍賣品。為了後續方便說明,我們假設其 itemId 為 1。
檢視拍賣品的詳細資訊
使用 GET /AuctionItems/{itemId}
可以查詢到拍賣品的詳細資訊。例如,我們使用 itemId 為 1 進行查詢,可能可以得到如下結果:
{ |
以上結果說明:
- 該拍賣品的起拍價格為 basePrice 10
- 競拍時間段為 startTime - endTime 時間的時段
- 當前的競拍記錄 biddingRecords 為空
其中時段可能由於啟動專案模板的時間發生變化,視具體專案啟動時間而定。
嘗試出價
接下來,我們呼叫 POST /AuctionItems
嘗試對當前在拍的拍賣品進行出價,呼叫並傳入引數如下:
{ |
引數說明如下:
- 出價人 userId 為 1
- 出價為 36524
- 拍賣品為 itemId 1
這將得到結果:
{ |
返回結果表明:
- success 出價成功
- 出價人 userId 為 1
- 最新出價為 36524
- 拍賣品當前狀態為
1 OnSell
然後在使用 GET /AuctionItems/{itemId}
便可以檢視到當前最新的拍賣品情況:
{ |
以上結果說明:
- 出價記錄已更新,添加了最新的一條競拍詳情。
這樣便完成了最簡單的出價演示。
開發者可以自行嘗試更多不同的狀態和引數體驗以上 API 的基礎用法。例如,出價小於當前最高出價,對非再拍商品進行出價等等操作。
停止專案
若想要停止當前正在執行的模板專案。只要在剛才執行 tye run
的控制檯上使用鍵盤按下 Ctrl
+C
即可停止正在執行的程式。
小結
本篇我們瞭解了安裝專案模板和使用專案模板的基本步驟。
下一步,我們將介紹專案模板中包含的主要內容。
最後但是最重要!
如果讀者對該內容感興趣,歡迎轉發、評論、收藏文章以及專案。
最近作者正在構建以 Actor 模式 和 事件溯源 為理論基礎的一套服務端開發框架。希望為開發者提供能夠便於開發出 “分散式”、“可水平擴充套件”、“可測試性高” 的應用系統 ——Newbe.Claptrap
本篇文章是該框架的一篇技術選文,屬於技術構成的一部分。
專案文件庫:claptrap.newbe.pro
聯絡方式: QQ 群 610394020
您還可以查閱本系列的其他選文:
理論入門篇
- Newbe.Claptrap - 一套以 “事件溯源” 和 “Actor 模式” 作為基本理論的服務端開發框架
術語介紹篇
- Actor 模式
- 事件溯源(Event Sourcing)
- Claptrap
- Minion
- 事件 (Event)
- 狀態 (State)
- 狀態快照 (State Snapshot)
- Claptrap 設計圖 (Claptrap Design)
- Claptrap 工廠 (Claptrap Factory)
- Claptrap Identity
- Claptrap Box
- Claptrap 生命週期(Claptrap Lifetime Scope)
- 序列化(Serialization)
- 最小競爭資源 (Minimal Competing Resources)
樣例實踐篇
- 設計一個火車票銷售系統
開發入門篇
- Newbe.Claptrap 框架入門,第一步 —— 開發環境準備
- Newbe.Claptrap 框架入門,第二步 —— 建立專案
開發工具篇
- 使用 Tye 輔助開發 k8s 應用竟如此簡單(一)
- 使用 Tye 輔助開發 k8s 應用竟如此簡單(二)
- 使用 Tye 輔助開發 k8s 應用竟如此簡單(三)
- 使用 Tye 輔助開發 k8s 應用竟如此簡單(四)
- 使用 Tye 輔助開發 k8s 應用竟如此簡單(五)
- 使用 Tye 輔助開發 k8s 應用竟如此簡單(六)
其他番外篇
- 談反應式程式設計在服務端中的應用,資料庫操作優化,從 20 秒到 0.5 秒
- 談反應式程式設計在服務端中的應用,資料庫操作優化,提速 Upsert
- 十萬同時線上使用者,需要多少記憶體?——Newbe.Claptrap 框架水平擴充套件實驗
- docker-mcr 助您全速下載 dotnet 映象
- 十多位全球技術專家,為你獻上近十個小時的.Net 微服務介紹
- 年輕的樵夫喲,你掉的是這個免費 8 核 4G 公網伺服器,還是這個隨時可用的 Docker 實驗平臺?
- 如何使用 dotTrace 來診斷 netcore 應用的效能問題
- 只要十步,你就可以應用表示式樹來優化動態呼叫
GitHub 專案地址:https://github.com/newbe36524/Newbe.Claptrap
Gitee 專案地址:https://gitee.com/yks/Newbe.Claptrap
您當前檢視的是先行釋出於 www.newbe.pro 上的部落格文章,實際開發文件隨版本而迭代。若要檢視最新的開發文件,需要移步 claptrap.newbe.pro。
------ 本文結束 ------
- 本文連結: https://www.newbe.pro/Newbe.Claptrap/Get-Started-2/
- 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!