這款高併發應用框架實在太好用了,夥伴們你造嗎?

Titan 框架開發快速入門數據庫

Titan Framework是經過Actor模型使用響應式消息傳輸模式,提供具備高性能、高響應、高可伸縮和高韌性的併發應用框架。併發

支持平臺

GNU/Linux是產品開發和運行的平臺。 Titan已在有2000個節點的GNU/Linux主機組成的集羣系統上獲得驗證。app

Win32平臺是做爲開發平臺支持的。框架

所需軟件

Linux和Windows所需軟件包括:異步

JavaTM1.8.x,必須安裝,建議選擇Sun公司發行的Java版本。maven

數據庫(基於業務系統開發須要)ide

Ø MySQL 5.x以上高併發

Ø Redis 3.x 以上性能

Ø MongDB 3.x以上測試

Ø HBase 2.7.x以上

入門實例

CQRS自己是一個很是簡單的模式。它只規定了處理命令的應用程序的組件應該與處理查詢 的組件分離。雖然這種分離自己很是簡單,但它與其餘模式結合時提供了許多很是強大的功能。Titan Framework 提供的構建塊更容易實現不一樣的模式與CQRS的結合。

這款高併發應用框架實在太好用了,夥伴們你造嗎?

上圖左側顯示的是UI組件, 經過 兩種方式與應用程序的其他部分進行交互:它嚮應用程序發送命令 (顯示在頂端的部分), 並從應用程序中查詢信息 (顯示在底端的部分)。

Command(命令)一般用簡單的對象表示,這些對象包含命令處理器執行所需的全部數據。一個命令經過它的名字來表達它的意圖。在Java術語中,這意味着使用類名來肯定須要作什 麼,命令的字段提供了執行該操做所需的信息。

Command Bus接受命令並路由它們到命令處理器(Command handler) 。每一個命令處理器響應特定類型的命令,並根據命令的內容執行邏輯。 然而,在某些狀況下,你也但願不顧實際的命令類型去執行邏輯,如驗證、日誌或權限。

Command handler(命令處理器)從倉儲中恢復領域對象(聚合)並執行方法來改變它們的狀態。這些聚合一般包含真實的業務邏輯並負責維護自身的不變性。聚合的狀態變化致使了領域事件的產生,領域事件和聚合都從領域模型中來。

Repositories(倉儲)負責提供訪問聚合。一般狀況下,這些倉儲的優化設計是僅經過其惟一標識符來查找聚合。一些倉儲將存儲聚合自身的狀態(例如,使用對象關係映射,ORM), 而另外一些則存儲聚合的狀態的更改到Event Store中,倉儲還負責對其備份數據庫中的聚合進行更改。

API定義

Titan Framework 針對RESTful f風格基於Spring MVC 進行結構封裝,將請求轉化爲對應系統的Command(CreateCommand、PutCommand、DeleteCommand、PatchCommand、GetCommand),所以針對API的定義 只須要面向接收到的請求進行對象的轉換,並返回相應的Command 。

@RestController

@RequestMapping("/demo")

publicclass TplAppController extends FunctionalController {

/** 自定義方法 **/

@RequestMapping(value = "/tpl/type", method = RequestMethod.POST)

public String doType(@RequestParam("typecode") String typeCode) {

System.out.println("Tpl App run function DOTYPE :" + typeCode);

Result result = runEnvironment.run(new TplAppTypCommand<TplAppType>(newTplAppType()));

return"ok" + result.toString();

}

/** 系統默認 GET方法**/

@Override

protected Command<?> getGetCommand(String serviceName, String id) {

TplAppEntity appEntity = new TplAppEntity(id);

returnnew Get<TplAppEntity>(appEntity);

}

/** 系統默認 PUT方法 **/

@Override

protected Command<?> getPutCommand(String serviceName, String id, String body) {

TplAppEntity tplAppEntity = JsonParserFactory.getParser().getObject(body, TplAppEntity.class);

returnnew Update<TplAppEntity>(tplAppEntity);

}

/** 系統默認POST方法**/

@Override

protected Command<?> getCreateCommand(String serviceName, String body) {

TplAppEntity tplAppEntity = JsonParserFactory.getParser().getObject(body, TplAppEntity.class);

returnnew Create<TplAppEntity>(tplAppEntity);

}

/** 系統默認POST方法**/

@Override

protected <T> Command<?> getCreateCommand(String serviceName, T body) {

returnnull;

}

/** 系統默認PATCH方法**/

@Override

protected Command<?> getPatchCommand(String serviceName, String id, String body) {

returnnull;

}

/**系統默認DELETE方法**/

@Override

protected Command<?> getDeleteCommand(String serviceName, String id) {

returnnull;

}

/**系統默認GET方法**/

@Override

protected Command<?> getQueryCommand(String serviceName, Object queryObject) {

returnnull;

}

}

注:

1.系統默認接收Json body ,基於JsonToEntity模式進行對象轉換,調用方法以下:

JsonParserFactory.getParser().getObject(body, TplAppEntity.class);

Command Handler定義

CommandHandler 是用來響應來至API(Controller的部分的請求),基於類上的註解在啓動時自動完成handler與Command的註冊過程。

@CmdHandler

publicclass TPlAppTypeHandler implementsCommandHandler<Create<TplAppType>> {

@Inject

TplAppRepository tplAppRepository;

@Override

public Result handle(TplAppTypCommand<TplAppType> cmd) {

TplAppDomain tplAppDomain = this.tplAppRepository.loadTo();

tplAppDomain.doTestApp();

returnnew Result(200, true);

}

}

Repository定義

publicinterfaceTplAppRepository {

TplAppDomain saveTo(TplAppDomain o);

TplAppDomain loadTo();

}

@Component

publicclass JpaTplAppRepository extendsDomainRepository<TplEntity>implements TplAppRepository {

@Override

public TplAppDomain saveTo(TplAppDomain o) {

returnthis.saveTo(o);

}

@Override

public TplAppDomain loadTo() {

this.load("testid");

}

@Override

protected String getTName() {

return TplEntity.class.getSimpleName();

}

}

Deploy定義

Titan Framework 基於Maven進行項目管理,業務功能開發完成後,只須要單獨定義Deploy並基於maven將業務功成引入,並在additionalLauncher中初始化業務代碼,MVN編譯後便可發佈進行測試。

publicclass KitaTplApplication extends LaunchFrontApplication {

publicstaticvoid main(String[] args) {

KitaTplApplication app = new KitaTplApplication ();

app.getDefLauncher().exec(args);

additionalLauncher.exec(args);

}

static LaunchPlugin additionalLauncher = (args) -> {

//DeployConfig.inited(TplConfig.props, args);

};

}

注: 1)多節點啓動,服務間會自動創建集羣關係,節點間基於Event事件進行相互的訪問;

2)更多關於節點的配置參考詳細功能說明;

3)事件定義參考以下Event定義;

Event 定義

異步事件處理能夠在應用處理的任何部分產生,能夠是本地的事件處理或者是其餘服務節點提供的事件處理(在集羣中自動完成負載、路由)。能夠是由結果的調用(有效時間內),也能夠是以通知的方式。

publicclassTplEvent extends DomainEvent {

privatestaticfinallongserialVersionUID = 3238428528672245374L;

.....

static public TplEvent generate(){

return new TplEvent() ;

}

}

Event Handler 定義

EventHandler 是對Event的響應處理,經過註釋定義該Handler的訪問路徑Path=App.Role.Service ,在集羣運行是能夠直接經過該路徑進行異步事件處理。

@EvtHandler(Role = "kita", Service = "tpl", App = "")

publicclassTplEventHandler implements EventHandler<TplEvent> {

@Override

public <E> void handle(E event) {

TplEvent evt = (TplEvent)event ;

Result result = ResultStatus.Ok;

...

Feedback.Content(evt, result);

}

}

Publish Event

Publish 提供以下模式

這款高併發應用框架實在太好用了,夥伴們你造嗎?

針對本App服務提供的EventHandler可基於Event Class 進行發送,調用以下

Result r = Publish.Send(Ways.Local(TplEvent.generate())).Retry();

另外一種調用模式是基於事件路徑(在集羣中自動完成路由)

Result r = Publish.Send(Ways.Remote("kita.tpl", TplEvent.generate())).Retry();

其餘的Pip及Parallel訪問請參考詳細功能說明

相關文章
相關標籤/搜索