Nats.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package Nats
  2. import (
  3. "Cold_WorkOrder/conf"
  4. "Cold_WorkOrder/models/Account"
  5. "fmt"
  6. "github.com/nats-io/nats.go"
  7. "github.com/vmihailenco/msgpack/v5"
  8. "time"
  9. )
  10. var Nats *nats.Conn
  11. func init() {
  12. fmt.Println("============Nats init============")
  13. var err error
  14. // 连接Nats服务器
  15. Nats, err = nats.Connect("nats://" + conf.NatsServer_Url)
  16. if err != nil {
  17. fmt.Println("nats 连接失败!")
  18. panic(err)
  19. }
  20. fmt.Println("nats OK!")
  21. }
  22. // 验证TOKEY
  23. func Verification(ToKey string) (bool, Account.User) {
  24. // 请求-响应, 向 verification 发布一个 `ToKey` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
  25. msg, err := Nats.Request("Cold_User_verification", []byte(ToKey), 3*time.Second)
  26. if err != nil {
  27. return false, Account.User{}
  28. }
  29. fmt.Printf("verification : %s\n", string(msg.Data))
  30. type T_R struct {
  31. Code int16 `xml:"Code"`
  32. Msg string `xml:"Msg"`
  33. Data Account.User `xml:"Data"` // 泛型
  34. }
  35. var t_R T_R
  36. err = msgpack.Unmarshal(msg.Data, &t_R)
  37. if err != nil {
  38. return false, Account.User{}
  39. }
  40. return true, t_R.Data
  41. }
  42. func CompanyListAllByT_name(T_name string) (list []Account.Company) {
  43. msg, err := Nats.Request("Cold_User_CompanyListAllByT_name", []byte(T_name), 3*time.Second)
  44. if err != nil {
  45. return list
  46. }
  47. fmt.Printf("CompanyListAllByT_name: %s\n", string(msg.Data))
  48. type T_R struct {
  49. Code int16 `xml:"Code"`
  50. Msg string `xml:"Msg"`
  51. Data []Account.Company `xml:"Data"` // 泛型
  52. }
  53. var t_R T_R
  54. err = msgpack.Unmarshal(msg.Data, &t_R)
  55. if err != nil {
  56. return list
  57. }
  58. return t_R.Data
  59. }
  60. func UserListAll() (list []Account.User) {
  61. msg, err := Nats.Request("Cold_User_UserListAll", []byte(""), 3*time.Second)
  62. if err != nil {
  63. return list
  64. }
  65. fmt.Printf("UserListAll: %s\n", string(msg.Data))
  66. type T_R struct {
  67. Code int16 `xml:"Code"`
  68. Msg string `xml:"Msg"`
  69. Data []Account.User `xml:"Data"` // 泛型
  70. }
  71. var t_R T_R
  72. err = msgpack.Unmarshal(msg.Data, &t_R)
  73. if err != nil {
  74. return list
  75. }
  76. return t_R.Data
  77. }
  78. // 添加系统日志
  79. func AddSysLogs(T_class, T_title string, T_txt interface{}) {
  80. type T_S struct {
  81. T_class string
  82. T_title string
  83. T_txt interface{}
  84. }
  85. b, _ := msgpack.Marshal(&T_S{T_class: T_class, T_title: T_title, T_txt: T_txt})
  86. // 发布-订阅 模式,向 test1 发布一个 `Hello World` 数据
  87. _ = Nats.Publish("Cold_User_AddSysLogs", b)
  88. }
  89. // 添加用户日志
  90. func AddUserLogs(T_uuid, T_class, T_title string, T_txt interface{}) {
  91. type T_S struct {
  92. T_uuid string
  93. T_class string
  94. T_title string
  95. T_txt interface{}
  96. }
  97. b, _ := msgpack.Marshal(&T_S{T_uuid: T_uuid, T_class: T_class, T_title: T_title, T_txt: T_txt})
  98. // 发布-订阅 模式,向 test1 发布一个 `Hello World` 数据
  99. _ = Nats.Publish("Cold_User_AddUserLogs", b)
  100. }