package Nats import ( "Cold_Api/conf" "Cold_Api/controllers/lib" "Cold_Api/logs" "Cold_Api/models/Device" "encoding/xml" "fmt" "github.com/nats-io/nats.go" "strconv" "strings" ) func init() { logs.Println("============Nats init============") var err error // 连接Nats服务器 lib.Nats, err = nats.Connect("nats://" + conf.NatsServer_Url) if err != nil { fmt.Println("nats 连接失败!") panic(err) } logs.Println("nats OK!") go NatsInit() } func NatsInit() { // 请求-响应, 响应 test3 消息。 _, _ = lib.Nats.Subscribe("Wx_BasicMessage_Event_QRCode", func(m *nats.Msg) { fmt.Printf(" => Nats Wx_BasicMessage_Event_QRCode message: %s\n", string(m.Data)) type Person_QRCode struct { ToUserName string `xml:"ToUserName"` //注意这里有个反引号 FromUserName string `xml:"FromUserName"` //注意这里有个反引号 CreateTime string `xml:"CreateTime"` //注意这里有个反引号 EventKey string `xml:"EventKey"` } var person_QRCode Person_QRCode err1 := xml.Unmarshal(m.Data, &person_QRCode) if err1 != nil { fmt.Println("Unmarshal error") _ = lib.Nats.Publish(m.Reply, []byte("")) return } // 进入 二维码配对 fmt.Println("FromUserName-", person_QRCode.FromUserName) fmt.Println("EventKey-", person_QRCode.EventKey) // 开始 处理消息 if strings.Contains(person_QRCode.EventKey, "@宝智达 微信公众号通知") { //"请将本内容发送到 深圳市宝智达科技有限公司 微信公众号-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|-", Content_r := lib.GetBetweenStr(person_QRCode.EventKey, "-|", "|-") decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345") decryptCode_int, err := strconv.Atoi(decryptCode) fmt.Println("解密结果:", decryptCode, " decryptCode_int", decryptCode_int, " Content_r:", Content_r) R_DeviceClass, err := Device.Read_Class_ById(decryptCode_int) if err != nil { _ = lib.Nats.Publish(m.Reply, []byte("")) return } if strings.Contains(R_DeviceClass.T_Notice_wx, person_QRCode.FromUserName) { _ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 已绑定,无需重复绑定!")) return } R_DeviceClass.T_Notice_wx = R_DeviceClass.T_Notice_wx + person_QRCode.FromUserName + "/重令名|" Device.Update_Class_ById(R_DeviceClass) _ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 绑定成功!")) return } _ = lib.Nats.Publish(m.Reply, []byte("")) }) //// 发布-订阅 模式,异步订阅 test1 //_, _ = Nats.Subscribe("test1", func(m *nats.Msg) { // fmt.Printf("Received a message: %s\n", string(m.Data)) //}) //// 队列 模式,订阅 test2, 队列为queue, test2 发向所有队列,同一队列只有一个能收到消息 //_, _ = Nats.QueueSubscribe("test2", "queue", func(msg *nats.Msg) { // fmt.Printf("Queue a message: %s\n", string(msg.Data)) //}) //// 请求-响应, 响应 test3 消息。 //_, _ = Nats.Subscribe("test3", func(m *nats.Msg) { // fmt.Printf("Reply a message: %s\n", string(m.Data)) // _ = Nats.Publish(m.Reply, []byte("I can help!!")) //}) }