您好,登錄后才能下訂單哦!
這篇文章主要講解了“Dactor的配置和API說明”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Dactor的配置和API說明”吧!
# **配置和API說明**
## 配置說明
通過在xml中的Step實現內部Actor之間的流程跳轉
在配置文件中包含
Actor、chain、和global配置 。
程序整個執行順序為根據交易碼找到對應的Actor,然后執行按照chain->parent->selft的順序進行執行。
chain執行到placeholder處,調用parent交易繼續執行,在parent交易中執行到placeholder交易后,調用selft自身交易繼續執行。
自身交易執行完畢,彈出parent的placeholder處交易繼續執行.parent執行完畢,彈出chain中代碼繼續執行。
global配置如下
```
<actor:global id="actorglobal">
<actor:param name="beginBeanId" value="beginActor"/>
<actor:param name="endBeanId" value="endActor"/>
</actor:global>
```
beginBeanId為默認的開始Actor,value中的值是在Spring中對應的beanName,程序初始化時將會取得此值,對未指定beginBeanId或者endBeanId的Actor初始化全局配置。
beginActor和endActor都需要繼承Actor接口。
actor配置如下
```
<actor:actor id="actorhttpcore" parent="chainparent" chain="unLoginChain" handleException="true" endBeanId="FinishActor" >
<actor:steps>
<actor:step xpoint="" ypont="" fromBeanId="beginActor" conditon="" toBeanId="placeholderActor"/>
<actor:step xpoint="" ypont="" fromBeanId="placeholderActor" conditon="context._SUFFIX=='json'" toBeanId="JsonViewResolverActor"/>
<actor:step xpoint="" ypont="" fromBeanId="placeholderActor" conditon="exception==null" toBeanId="ViewResolveActor"/>
<actor:step xpoint="" ypont="" fromBeanId="placeholderActor" conditon="exception!=null" toBeanId="ErrorViewResolveActor"/>
</actor:steps>
<results>
<result name="success">htmlstream:</result>
</results>
</actor:actor>
```
屬性handleException如果不設置的話,遇到異常,程序將會認為子類中已經執行完畢,跳到parent中PlaceHolder處執行。設置為true,將不會直接跳轉到parent中,由子類進行自我處理。
parent和chain為調用具體交易前需要調用的公共交易,由于大部分交易都有通用的前置交易和統一的后置交易。通過設置parent或者chain,可提高代碼復用度。
fromBeanId和toBeanId配置的是Actor或者實現Actor接口的beanId。
parent和chain中的ref都需要是Actor.
results中可定義返回的state和需要處理的viewActor
chain配置
```
<actor:chain id="unLoginChain">
<actor:before>
<actor:ref bean="actorhttpcore"></actor:ref>
</actor:before>
</actor:chain>
```
chain可直觀展現Actor調用順序.
在chain中可順序并列多個parent類。每個parent中的Step都需要有placeHolderActor,以調用子類。
依次執行before中的交易,再執行自身交易。自身交易執行完畢,再依次回溯責任鏈中的每個交易,直到無可用交易。
## 重要類方法說明
cn.ymotel.dactor.core.MessageDispatcher是交易流轉的核心接口類
public void startMessage(Message message, ActorTransactionCfg actorcfg, boolean blocked) throws Exception
方法,用于開始整個流程,其中message需要在執行前進行構造,actorcfg可通過spring的getBean方法得到為Actor對象,如下
```
<actor id="randomTxt1" parent="randomTxt" beginBeanId="randomTxtActor">
</actor>
```
通過getBean('randomTxt1')即可得到ActorTransactionCfg對象。
blocked為是否阻塞,一般在交易初次放入隊列是為false,表示如果隊列滿,則直接扔給客戶端進行處理。為true則一般為內部交易,必須提交給隊列進行處理。
sendMessage方法內部調用,用于將處理完畢的Message重新放入隊列,繼續下一步流程。
cn.ymotel.dactor.core.disruptor.MessageRingBufferDispatcher是MessageDispatcher的接口實現類。,在啟動Spring是需要在配置中加上
```
<bean id="MessageRingBufferDispatcher" class="cn.ymotel.dactor.core.disruptor.MessageRingBufferDispatcher">
</bean>
```
MessageRingBufferDispatcher的strategy、bufferSize、threadNumber為三個可設置屬性.正常情況下使用默認設置即可。
strategy默認使用ringBuffer的BlockingWaitStrategy策略進行調度,如果交易量比較大,可調整此策略。
bufferSize默認使用1024。
threadNumber默認使用CPU個數的線程數。
## 其他默認Actor說明
cn.ymotel.dactor.message.Message.Actor,所有需要在執行的交易都必須繼承此接口。
public Object HandleMessage(Message message) throws Exception;程序通過調用HandleMessage對象,如果返回的不是message對象或者為NULL,則認為此交易是異步執行,不再自行調度。由異步交易在收到請求后,自己調用將Message再此放入隊列中。
cn.ymotel.dactor.action.PlaceholderActor 交易為特殊交易,用來將當前隊列暫存,并調用子交易。
cn.ymotel.dactor.action.BeginActor 為Actor中step的默認開始交易。
cn.ymotel.dactor.action.EndActor 為Actor中step的默認結束交易。
cn.ymotel.dactor.action.JsonViewResolverActor為需要返回Json的J2EE view
cn.ymotel.dactor.action.ViewResolveActor為需要返回J2EE view的統一處理Actor
cn.ymotel.dactor.action.httpclient.HttpClientActor 提供的異步調用httpClient的Actor
cn.ymotel.dactor.action.netty.aysnsocket.TcpClientActor 提供的異步調用netty的Actor
## 交易流程舉例說明
```
<actor:actor id="actorhttpcore" handleException="true" endBeanId="FinishActor" >
<actor:steps>
<actor:step xpoint="" ypont="" fromBeanId="beginActor" conditon="" toBeanId="placeholderActor"/>
<actor:step xpoint="" ypont="" fromBeanId="placeholderActor" conditon="context._SUFFIX=='json'" toBeanId="JsonViewResolverActor"/>
<actor:step xpoint="" ypont="" fromBeanId="placeholderActor" conditon="exception==null" toBeanId="ViewResolveActor"/>
<actor:step xpoint="" ypont="" fromBeanId="placeholderActor" conditon="exception!=null" toBeanId="ErrorViewResolveActor"/>
</actor:steps>
</actor:actor>
<actor id="randomTxt2" parent="actorhttpcore" beginBeanId="randomTxtActor">
</actor>
```
以上交易的交易流程圖如下
以上的完整例子都可在example中得到
感謝各位的閱讀,以上就是“Dactor的配置和API說明”的內容了,經過本文的學習后,相信大家對Dactor的配置和API說明這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。