# 控制臺命令
## 介紹
0.4.1版本以上,框架支持了控制臺任務支持,可以通過控制臺任務完成腳本執行,配合調度器還可以實現定時任務功能。
## 使用說明
和 http 服務一樣,控制臺任務也有一個類似路由的方法進行任務注冊。
通過 orange 腳手架創建的項目,控制臺路由文件默認在 route/job.go 中聲明。
控制臺任務定義需要通過結構體實現 `app.JobSrv` 接口,即接口體中需要有 `func (s *Route) JobDispatch() ` 和 `func (s *Route) Register() ` 方法。
JobDispatch 方法中添加各類控制臺任務的名稱和具體方法的綁定,Register方法用于初始化啟動自定義服務(可以共用http的Register方法),和 init 方法的區別是,Register方法在框架相關組件加載完成后再執行,避免了一些空指針的情況。
## 定義控制臺任務
通過 `app.JobRun("任務名稱", "綁定方法", "超時時間")` 方法對任務進行注冊,具體如下:
```
func (s *Route) JobDispatch() {
// 注冊一個任務
app.JobRun("showTime", controller.JobShowTime, 30*time.Second)
}
```
其中 `controller.JobShowTime` 是一個 `func(c *context.Context)error` 這樣的方法,具體的業務可以放到該方法內。
## 控制臺任務任務執行
定義好控制臺任務后通過構建腳手架生成的 `job.go` 這個main函數帶上 --jobRun 參數即可執行對應任務。
直接執行 `go run job.go --config=config/config.toml --jobRun=showTime` 即可運行注冊的任務。
## 完整示例
將下面完整代碼保持成 `job.go` 直接運行 `go run job.go --jobRun=showTime`
```
package main
import (
"demo9/http/controller"
"gitee.com/zhucheer/orange/app"
"time"
)
func main(){
router := &Route{}
app.AppStart(router)
}
type Route struct {
}
func (s *Route) JobDispatch() {
app.JobRun("showTime", controller.JobShowTime, 30*time.Second)
}
func (s *Route) Register() {
}
```