基于事件机制的多模块框架,支持动态库,grpc,websocket,mqtt等多种与后端通信组合方式. 模块动态替换,部分加载或者升级.
#GMQ 消息模块组合架构
moduleName:
type : inner/exe/dll/so
enable: 1/ture
moduleName 模块名称
import (
"github.com/gw123/GMQ/modules/base"
"github.com/gw123/GMQ/core/interfaces"
"fmt"
)
type DebugModule struct {
base.BaseModule
}
func NewDebugModule() *DebugModule {
this := new(DebugModule)
return this
}
func (this *DebugModule) Init(app interfaces.App, config interfaces.ModuleConfig) error {
this.BaseModule.Init(app, this, config)
//订阅 debug 消息主题
app.Sub("debug", this)
return nil
}
// 处理消息
func (this *DebugModule) Handle(event interfaces.Event) error {
return nil
}
// 定时触发方法
func (this *DebugModule) Watch(index int) {
return
}
package debugModule
import "github.com/gw123/GMQ/core/interfaces"
type DebugModuleProvider struct {
module interfaces.Module
}
func NewDebugModuleProvider() *DebugModuleProvider {
this := new(DebugModuleProvider)
return this
}
func (this *DebugModuleProvider) GetModuleName() string {
return "Debug"
}
func (this *DebugModuleProvider) Register() {
}
func (this *DebugModuleProvider) GetModule() interfaces.Module {
if this.module != nil {
return this.module
}
this.module = NewDebugModule()
return this.module
}
func (this *DebugModuleProvider) GetNewModule() interfaces.Module {
this.module = NewDebugModule()
return this.module
}
func LoadModuleProvider(app interfaces.App) {
app.LoadModuleProvider(debugModule.NewDebugModuleProvider())
return
}
#数据库配置 支持多数据库配置
dbpool:
default: xyt
db1:
database: "gateway"
host: "xytschool.com"
username: "dbuser"
password: "dbpwd"
drive: "mysql,pg,sqllite"
db2:
database: "gateway"
host: "xytschool.com"
username: "dbuser"
password: "dbpwd"
drive: "mysql,pg,sqllite"
#数据库使用
mqtt:
type : inner
productKey : key
deviceSecret: secret
deviceName: name
web:
type : inner
addr: 0.0.0.0
port: 8080
staticFileUrl: "http://127.0.0.1:8080"
staticFileVersion : "1001"
viewsRoot: "./views"
publicRoot: "./public"
sotragePath: "./storage"
allowOrigins:
- "http://127.0.0.1:8080"
- "http://localhost:10086"
- "http://127.0.0.1:88"
app:
logFilterCategories : "EventQueue,Dispath"
debugLevel: debug
dbpool:
default: xyt
xyt:
database: "gateway"
host: "${DB_HOST}"
username: "${DB_USER}"
password: "${DB_PWD}"
drive: "mysql"
modules:
comment:
type: inner
bindAddr: ${COMMENT_ADDR}
Starting envoy ... done
Starting gateway ... done