我們在的專案組呢,有一項作業是,收郵件(很大程度上使用郵件是為了存個底),然后從我們的系統里邊查一下相關資訊,然后回復個郵件的作業,雖然作業量并不大,但是會把時間切的稀碎,為了拯救我的時間,所以做了一個郵件的值班機器人,讓他來頂替我自動回復郵件,考慮到這個東西應該也有不少人會用得到,所以就把這個東西分享出來,先把效果分享出來,
服務器上就很簡單,dutyrobot就是Golang編譯之后的框架,lua檔案夾中就是使用lua撰寫的業務邏輯,Data.json就是保存了一些相關的資料,防止重啟之后,資料丟掉,比如說Cookie資訊,

用最基礎的alpine進行啟動一下,并且將相關的檔案夾映射到容器里邊,然后在容器里邊啟動軟體,這么做主要是為了讓鏡像能夠擁有自己的環境變數,

然后業務邏輯里邊定期,收郵件,然后判定業務邏輯,執行對應的lua腳本,然后回復郵件,

在順手往我們的內部事務群里邊推一條相關結果,

其實我本職是C#程式員來著,做這個東西,最先也是使用C#來實作的,不過C#跟Lua相性不好,我沒有找到比較優雅的類別庫,要上Linux系統,用.net core + C 呼叫lua的方式雖然也嘗試過,但是我本身對這件事情還是非常虛的,Python的各種包安裝都給我搞蒙蔽了,所以最后就選用了Golang來寫底層函式公布給Lua,然后讓lua來寫各種業務邏輯的方式來實作整個專案,框架部分嘛,一旦寫完,改動的幾率還是比較低的,并且Window交叉編譯Linux,直接就可以部署上線,連個環境都不用裝,簡直爽歪歪,lua解釋性語言,出了啥都沒有以外其他的都挺好的,
基礎框架都是通用的,所以可以直接放出來,拿出來用,只需要關心自己的業務內容就可以了,
基礎框架:https://gitee.com/anxin1225/DutyRobotGo
在這個框架里邊,我給lua提供了不少功能,主要包括收發郵件,發起網路請求,發起網路監聽(甚至可以拿這個做底層做一個小型的API站,信我,我這么做過了已經),臨時存個資料,獲取環境變數,獲取檔案內容,再啟動一個Lua容器(沒錯,lua又再起一個lua容器的能力),獲取當前系統資訊,cron定時任務,當然如果你覺得不夠的話,還可以進行二次擴展,其實非常容易,我已經寫了好多了,比著抄一下,很容易的,不過一般情況下不用擴展了,我這邊就不深入講解框架部分了,畢竟,怎么做業務才是重點,
然后,講一下Lua部分是怎么實作的,因為Golang里邊的代碼是直接找到了main.lua進行執行的,我們也就從這個檔案開始講起,

我將好多服務注冊了進來,究竟有哪些服務呢,還是得去看看框架里邊怎么寫的,Cron就是我寫的其中一個小功能,其實就是task任務,對應到框架部分呢可以查看tasks檔案夾里去看具體的實作,可以看到倆邊有兩個檔案,其中task.go是Golang的語言函式task_4lua.go就是把Golang的函式公開給lua來呼叫的介面注冊的位置,

我們來看到task_4lua.go這個檔案里邊,一般會存在一個函式叫做RegisterFunc_4lua就是注冊用的,

這就很眼熟了,Cron就是lua用的類的名字,下邊這個map就是他們對應的需要呼叫的名字,后邊會對照著golang這邊的函式,一般函式里邊我會寫上lua那邊應該怎么呼叫,如果找不到的話,可以來框架這邊翻一翻,有驚喜也說不定,

我的業務里邊,就是每分鐘接收一下,每5分鐘保存一下Cookie,真正的業務邏輯其實就寫在各個lua檔案里邊,我們去看一下怎么接收訊息和處理訊息的,
這里邊就是簡單的lua的業務邏輯了,收一下郵件,然后呼叫對應的處理lua,處理完了就完事了,


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/13831.html
標籤:Go
