這篇文章主要講解了“Dactor的配置和API說(shuō)明”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Dactor的配置和API說(shuō)明”吧!
成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鐵嶺縣做網(wǎng)站,已為上家服務(wù),為鐵嶺縣各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18980820575
# **配置和API說(shuō)明**
## 配置說(shuō)明
通過(guò)在xml中的Step實(shí)現(xiàn)內(nèi)部Actor之間的流程跳轉(zhuǎn)
在配置文件中包含
Actor、chain、和global配置 。
程序整個(gè)執(zhí)行順序?yàn)楦鶕?jù)交易碼找到對(duì)應(yīng)的Actor,然后執(zhí)行按照chain->parent->selft的順序進(jìn)行執(zhí)行。
chain執(zhí)行到placeholder處,調(diào)用parent交易繼續(xù)執(zhí)行,在parent交易中執(zhí)行到placeholder交易后,調(diào)用selft自身交易繼續(xù)執(zhí)行。
自身交易執(zhí)行完畢,彈出parent的placeholder處交易繼續(xù)執(zhí)行.parent執(zhí)行完畢,彈出chain中代碼繼續(xù)執(zhí)行。
global配置如下
```
```
beginBeanId為默認(rèn)的開(kāi)始Actor,value中的值是在Spring中對(duì)應(yīng)的beanName,程序初始化時(shí)將會(huì)取得此值,對(duì)未指定beginBeanId或者endBeanId的Actor初始化全局配置。
beginActor和endActor都需要繼承Actor接口。
actor配置如下
```
```
屬性handleException如果不設(shè)置的話(huà),遇到異常,程序?qū)?huì)認(rèn)為子類(lèi)中已經(jīng)執(zhí)行完畢,跳到parent中PlaceHolder處執(zhí)行。設(shè)置為true,將不會(huì)直接跳轉(zhuǎn)到parent中,由子類(lèi)進(jìn)行自我處理。
parent和chain為調(diào)用具體交易前需要調(diào)用的公共交易,由于大部分交易都有通用的前置交易和統(tǒng)一的后置交易。通過(guò)設(shè)置parent或者chain,可提高代碼復(fù)用度。
fromBeanId和toBeanId配置的是Actor或者實(shí)現(xiàn)Actor接口的beanId。
parent和chain中的ref都需要是Actor.
results中可定義返回的state和需要處理的viewActor
chain配置
```
```
chain可直觀展現(xiàn)Actor調(diào)用順序.
在chain中可順序并列多個(gè)parent類(lèi)。每個(gè)parent中的Step都需要有placeHolderActor,以調(diào)用子類(lèi)。
依次執(zhí)行before中的交易,再執(zhí)行自身交易。自身交易執(zhí)行完畢,再依次回溯責(zé)任鏈中的每個(gè)交易,直到無(wú)可用交易。
## 重要類(lèi)方法說(shuō)明
cn.ymotel.dactor.core.MessageDispatcher是交易流轉(zhuǎn)的核心接口類(lèi)
public void startMessage(Message message, ActorTransactionCfg actorcfg, boolean blocked) throws Exception
方法,用于開(kāi)始整個(gè)流程,其中message需要在執(zhí)行前進(jìn)行構(gòu)造,actorcfg可通過(guò)spring的getBean方法得到為Actor對(duì)象,如下
```
```
通過(guò)getBean('randomTxt1')即可得到ActorTransactionCfg對(duì)象。
blocked為是否阻塞,一般在交易初次放入隊(duì)列是為false,表示如果隊(duì)列滿(mǎn),則直接扔給客戶(hù)端進(jìn)行處理。為true則一般為內(nèi)部交易,必須提交給隊(duì)列進(jìn)行處理。
sendMessage方法內(nèi)部調(diào)用,用于將處理完畢的Message重新放入隊(duì)列,繼續(xù)下一步流程。
cn.ymotel.dactor.core.disruptor.MessageRingBufferDispatcher是MessageDispatcher的接口實(shí)現(xiàn)類(lèi)。,在啟動(dòng)Spring是需要在配置中加上
```
```
MessageRingBufferDispatcher的strategy、bufferSize、threadNumber為三個(gè)可設(shè)置屬性.正常情況下使用默認(rèn)設(shè)置即可。
strategy默認(rèn)使用ringBuffer的BlockingWaitStrategy策略進(jìn)行調(diào)度,如果交易量比較大,可調(diào)整此策略。
bufferSize默認(rèn)使用1024。
threadNumber默認(rèn)使用CPU個(gè)數(shù)的線程數(shù)。
## 其他默認(rèn)Actor說(shuō)明
cn.ymotel.dactor.message.Message.Actor,所有需要在執(zhí)行的交易都必須繼承此接口。
public Object HandleMessage(Message message) throws Exception;程序通過(guò)調(diào)用HandleMessage對(duì)象,如果返回的不是message對(duì)象或者為NULL,則認(rèn)為此交易是異步執(zhí)行,不再自行調(diào)度。由異步交易在收到請(qǐng)求后,自己調(diào)用將Message再此放入隊(duì)列中。
cn.ymotel.dactor.action.PlaceholderActor 交易為特殊交易,用來(lái)將當(dāng)前隊(duì)列暫存,并調(diào)用子交易。
cn.ymotel.dactor.action.BeginActor 為Actor中step的默認(rèn)開(kāi)始交易。
cn.ymotel.dactor.action.EndActor 為Actor中step的默認(rèn)結(jié)束交易。
cn.ymotel.dactor.action.JsonViewResolverActor為需要返回Json的J2EE view
cn.ymotel.dactor.action.ViewResolveActor為需要返回J2EE view的統(tǒng)一處理Actor
cn.ymotel.dactor.action.httpclient.HttpClientActor 提供的異步調(diào)用httpClient的Actor
cn.ymotel.dactor.action.netty.aysnsocket.TcpClientActor 提供的異步調(diào)用netty的Actor
## 交易流程舉例說(shuō)明
```
```
以上交易的交易流程圖如下
以上的完整例子都可在example中得到
感謝各位的閱讀,以上就是“Dactor的配置和API說(shuō)明”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Dactor的配置和API說(shuō)明這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!