package util import ( "fmt" "github.com/nats-io/nats.go" "github.com/vmihailenco/msgpack/v5" "time" "ydMonitoring/config" ) var ( Nats *nats.Conn url string ) // 初始化 func init() { url = config.Config.GetString("nats.url") fmt.Println("============Nats init============") var err error // 连接Nats服务器 Nats, err = nats.Connect("nats://" + url) if err != nil { panic(any("nats 连接失败!")) } fmt.Println("nats OK!") } type T_Warning struct { T_tp int `xml:"T_tp"` // 报警类型 ->WarningList T_sn string `xml:"T_sn"` // 设备序列号 T_D_name string `xml:"T_D_name"` // 设备名称 T_id int `xml:"T_id"` // 传感器 ID T_DS_name string `xml:"T_DS_name"` // 传感器名称 T_Remark string `xml:"T_Remark"` // 采集内容 T_Ut time.Time `xml:"T_Ut"` // 采集时间 T_ToAdmin []int `xml:"T_ToAdmin"` // 发送给谁 Admin.Id T_State int `xml:"T_State"` // 0 删除 1 不处理 2 已处理 3 未处理 } // SendWarning 发送报警(level 等级 label 标签 msg 内容 args 参数) func SendWarning(tSn string, tId int, tDevName, tSensorName, msg string) { T_Warning_r := T_Warning{ T_tp: 1012, T_sn: tSn, T_D_name: "", T_id: tId, T_DS_name: "", T_Remark: msg, T_Ut: time.Now(), T_State: 3, } AddWarning(T_Warning_r) fmt.Println(tSn, tDevName, msg) } func AddWarning(r T_Warning) bool { b, err := msgpack.Marshal(&r) if err != nil { fmt.Println(err) } // 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息 msg, err := Nats.Request("AddWarning", b, 3*time.Second) if err != nil { fmt.Println(err) } else { fmt.Printf("AddWarning : %s\n", string(msg.Data)) return true } return false }