akka系統(tǒng)中停止運(yùn)行任務(wù)的問題-創(chuàng)新互聯(lián)

上周的工作中遇到了一個停止運(yùn)行任務(wù)時的問題,就是在一個任務(wù)運(yùn)行到一半時需要停止的問題。正常的需求是一按停止按鈕,就要立即停止,但現(xiàn)在都要等程序運(yùn)行完才能停止,現(xiàn)在是一個bug。由于之前寫任務(wù)運(yùn)行邏輯的不是我,因此我先花一個小時苦讀大神們的代碼,了解了他們對于任務(wù)運(yùn)行那塊的邏輯,發(fā)現(xiàn)是首先前端發(fā)消息給一個Actor,然后這個Actor用actorOf方法創(chuàng)建許多子Actor,然后再對這些Actor調(diào)用ActorSelection創(chuàng)建運(yùn)行這個任務(wù)的Actor。

成都創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)專家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,專業(yè)領(lǐng)域包括成都網(wǎng)站建設(shè)、成都做網(wǎng)站、電商網(wǎng)站制作開發(fā)、小程序開發(fā)、微信營銷、系統(tǒng)平臺開發(fā),與其他網(wǎng)站設(shè)計及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!

  之前以為通過獲取Actor的地址,終止這個Actor,然后自動終止其所有子Actor應(yīng)該就能停止任務(wù)了,后來發(fā)現(xiàn)根本停不下來。

  第一次嘗試是在狀態(tài)機(jī)FSM中不僅在whenUnhandled方式下停止Actor,而且在其他每一種狀態(tài)下都調(diào)用停止Actor操作,直接終止運(yùn)行該線程的Actor。

  這里順便普及一下停止Actor的時候,是給該Actor發(fā)送兩種消息,Kill或者PoisonPill。使用Kill消息可以在不損失緩沖區(qū)中消息的情況下重啟Actor對象,但是不會停止Actor對象,僅僅是重啟,而且會拋出異常,使用PoisonPill消息可以停止Actor對象,但允許Actor對象處理完收到PoisonPill消息之前存儲在緩沖區(qū)中的消息。然后我又嘗試了context.stop(actorRef)去直接停止某Actor,同樣無濟(jì)于事,線程依舊瀟灑地運(yùn)行結(jié)束。

  這個時候我發(fā)現(xiàn)問題應(yīng)該轉(zhuǎn)移到線程級別,既然終止Actor是不起作用的,我就干脆把這個線程終止掉。一開始我們采用給運(yùn)行線程的Actor發(fā)送消息的方式終止該線程,發(fā)現(xiàn)能停止,但還是在任務(wù)運(yùn)行完之后停止。后來我意識到,Actor處理消息應(yīng)該是按照發(fā)送順序來的,首先發(fā)送的消息是處理這個任務(wù),所以只有處理完任務(wù)才會處理停止線程這個消息,此時線程已經(jīng)不是運(yùn)行狀態(tài)了。因此我干脆定義了一個線程安全的HashMap,保存了id和Process對象的映射關(guān)系,可以通過這個數(shù)據(jù)結(jié)構(gòu)搜索到線程對象,當(dāng)父Actor收到終止任務(wù)命令時,不再向運(yùn)行該任務(wù)的子Actor發(fā)送消息,而是在父Actor中直接調(diào)用運(yùn)行任務(wù)的線程的Process對象里的destroy方法,直接終止這個線程,終于成功了。

  得出結(jié)論就是,akka系統(tǒng)對于線程粒度的啟停控制可能還是有一定缺陷,需要我們根據(jù)線程的Process對象自己來做停止操作。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:akka系統(tǒng)中停止運(yùn)行任務(wù)的問題-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article8/djihop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、Google建站公司網(wǎng)站內(nèi)鏈、定制開發(fā)、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)