natsUtil.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package util
  2. import (
  3. "fmt"
  4. "github.com/nats-io/nats.go"
  5. "github.com/vmihailenco/msgpack/v5"
  6. "time"
  7. "ydMonitoring/config"
  8. )
  9. var (
  10. Nats *nats.Conn
  11. url string
  12. )
  13. // 初始化
  14. func init() {
  15. url = config.Config.GetString("nats.url")
  16. fmt.Println("============Nats init============")
  17. var err error
  18. // 连接Nats服务器
  19. Nats, err = nats.Connect("nats://" + url)
  20. if err != nil {
  21. panic(any("nats 连接失败!"))
  22. }
  23. fmt.Println("nats OK!")
  24. }
  25. type T_Warning struct {
  26. T_tp int `xml:"T_tp"` // 报警类型 ->WarningList
  27. T_sn string `xml:"T_sn"` // 设备序列号
  28. T_D_name string `xml:"T_D_name"` // 设备名称
  29. T_id int `xml:"T_id"` // 传感器 ID
  30. T_DS_name string `xml:"T_DS_name"` // 传感器名称
  31. T_Remark string `xml:"T_Remark"` // 采集内容
  32. T_Ut time.Time `xml:"T_Ut"` // 采集时间
  33. T_ToAdmin []int `xml:"T_ToAdmin"` // 发送给谁 Admin.Id
  34. T_State int `xml:"T_State"` // 0 删除 1 不处理 2 已处理 3 未处理
  35. }
  36. // SendWarning 发送报警(level 等级 label 标签 msg 内容 args 参数)
  37. func SendWarning(tSn string, tId int, tDevName, tSensorName, msg string) {
  38. T_Warning_r := T_Warning{
  39. T_tp: 1012,
  40. T_sn: tSn,
  41. T_D_name: "",
  42. T_id: tId,
  43. T_DS_name: "",
  44. T_Remark: msg,
  45. T_Ut: time.Now(),
  46. T_State: 3,
  47. }
  48. AddWarning(T_Warning_r)
  49. fmt.Println(tSn, tDevName, msg)
  50. }
  51. func AddWarning(r T_Warning) bool {
  52. b, err := msgpack.Marshal(&r)
  53. if err != nil {
  54. fmt.Println(err)
  55. }
  56. // 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
  57. msg, err := Nats.Request("AddWarning", b, 3*time.Second)
  58. if err != nil {
  59. fmt.Println(err)
  60. } else {
  61. fmt.Printf("AddWarning : %s\n", string(msg.Data))
  62. return true
  63. }
  64. return false
  65. }