Nats.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. }
  101. func CheckUserPermissions(Power_Id int, Req_Url string) bool {
  102. type T_Req struct {
  103. Power_Id int `xml:"Power_Id"` // 权限id
  104. Req_Url string `xml:"Req_Url"` // 请求url
  105. }
  106. t_Req := T_Req{
  107. Power_Id: Power_Id,
  108. Req_Url: Req_Url,
  109. }
  110. b, _ := msgpack.Marshal(&t_Req)
  111. // 请求-响应, 向 verification 发布一个 `ToKey` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
  112. msg, err := Nats.Request("Cold_User_CheckUserPermissions", b, 3*time.Second)
  113. fmt.Printf("CheckUserPermissions : %s\n", string(msg.Data))
  114. if err != nil {
  115. return false
  116. }
  117. type T_R struct {
  118. Code int16 `xml:"Code"`
  119. Msg string `xml:"Msg"`
  120. Pass bool `xml:"Pass"` // 泛型
  121. }
  122. var t_R T_R
  123. err = msgpack.Unmarshal(msg.Data, &t_R)
  124. if err != nil {
  125. return false
  126. }
  127. return t_R.Pass
  128. }