代码组织结构
首先我们重新组织了一下代码目录结构,新增了一个helloworld目录用来存放模块代码
工程目录
|-bin
|-conf
|-server.conf
|-helloworld
|-module.go
|-xxx.go
|-main.go
编写第一个模块
package helloworld
import (
"github.com/liangdas/mqant/conf"
"github.com/liangdas/mqant/log"
"github.com/liangdas/mqant/module"
"github.com/liangdas/mqant/module/base"
)
var Module = func() module.Module {
this := new(HellWorld)
return this
}
type HellWorld struct {
basemodule.BaseModule
}
func (self *HellWorld) GetType() string {
//很关键,需要与配置文件中的Module配置对应
return "helloworld"
}
func (self *HellWorld) Version() string {
//可以在监控时了解代码版本
return "1.0.0"
}
func (self *HellWorld) OnInit(app module.App, settings *conf.ModuleSettings) {
self.BaseModule.OnInit(self, app, settings)
log.Info("%v模块初始化完成...",self.GetType())
}
func (self *HellWorld) Run(closeSig chan bool) {
log.Info("%v模块运行中...",self.GetType())
log.Info("%v say hello world...",self.GetType())
<-closeSig
log.Info("%v模块已停止...",self.GetType())
}
func (self *HellWorld) OnDestroy() {
//一定别忘了继承
//self.BaseModule.OnDestroy()
log.Info("%v模块已回收...",self.GetType())
}
尝试运行
2020-05-03T18:27:19.224684+08:00 [-] [-] [] [E] nats agent: nats: no servers available for connection
Server configuration path : //work/go/mqant-helloworld/bin/conf/server.json
2020-05-03T18:27:19.225643+08:00 [-] [-] [development] [I] [app.go:203] mqant starting up
2020-05-03T18:27:19.225725+08:00 [-] [-] [development] [I] [ModuleManager.go:50] This service ModuleGroup(ProcessID) is [development]
运行以后没有看到我们关注的模块日志。原因是还有两项工作我们没有完成
将模块加入main.go入口函数
func main() { go func() { http.ListenAndServe("0.0.0.0:6060", nil) }() app := mqant.CreateApp( module.Debug(true),//只有是在调试模式下才会在控制台打印日志, 非调试模式下只在日志文件中输出日志 ) err:= app.Run( helloworld.Module(), ) if err!=nil{ log.Error(err.Error()) } }
在配置文件中加入模块配置
{ "Module":{ "helloworld":[ { "Id":"helloworld", "ProcessID":"development" } ] }, 。。。 }
配置说明 Module |-moduleType 与func GetType() string 值保持一致 |- ProcessID 模块分组,在今后分布式部署时非常有用,默认分组为development
运行
2020-05-03T18:42:09.465739+08:00 [-] [-] [] [E] nats agent: nats: no servers available for connection
Server configuration path : //work/go/mqant-helloworld/bin/conf/server.json
2020-05-03T18:42:09.466789+08:00 [-] [-] [development] [I] [app.go:203] mqant starting up
2020-05-03T18:42:09.466889+08:00 [-] [-] [development] [I] [ModuleManager.go:50] This service ModuleGroup(ProcessID) is [development]
2020-05-03T18:42:09.467058+08:00 [-] [-] [development] [I] [rpc_server.go:142] Registering node: HelloWorld@1b0073cbbab33247
2020-05-03T18:42:09.468696+08:00 [-] [-] [development] [I] [module.go:32] HelloWorld模块初始化完成...
2020-05-03T18:42:09.468907+08:00 [-] [-] [development] [I] [module.go:36] HelloWorld模块运行中...
2020-05-03T18:42:09.468984+08:00 [-] [-] [development] [I] [module.go:37] HelloWorld say hello world...
2020-05-03T18:42:09.468725+08:00 [-] [-] [development] [I] [rpc_server.go:142] Registering node: HelloWorld@1b0073cbbab33247
停止
追加日志
2020-05-03T18:42:31.347133+08:00 [-] [-] [development] [I] [module.go:39] HelloWorld模块已停止...
2020-05-03T18:42:31.347248+08:00 [-] [-] [development] [I] [module.go:45] HelloWorld模块已回收...
2020-05-03T18:42:31.34735+08:00 [-] [-] [development] [I] [app.go:238] mqant closing down (signal: interrupt)