Nats.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package Nats
  2. import (
  3. "ERP_user/conf"
  4. "ERP_user/models/Account"
  5. "ERP_user/models/System"
  6. "fmt"
  7. powerlibs "git.baozhida.cn/ERP_libs/Power"
  8. "github.com/nats-io/nats.go"
  9. "github.com/vmihailenco/msgpack/v5"
  10. )
  11. var Nats *nats.Conn
  12. func init() {
  13. fmt.Println("============Nats init============")
  14. var err error
  15. // 连接Nats服务器
  16. Nats, err = nats.Connect("nats://" + conf.NatsServer_Url)
  17. if err != nil {
  18. fmt.Println("nats 连接失败!")
  19. panic(err)
  20. }
  21. fmt.Println("nats OK!")
  22. go NatsInit()
  23. }
  24. func NatsInit() {
  25. // 请求-响应, 响应 test3 消息。
  26. _, _ = Nats.Subscribe("ERP_User_verification", func(m *nats.Msg) {
  27. fmt.Printf("ERP_User_verification message: %v\n", string(m.Data))
  28. type T_User struct {
  29. T_uuid string `xml:"T_uuid"`
  30. T_power string `xml:"T_power"`
  31. T_name string `xml:"T_name"`
  32. T_user string `xml:"T_user"`
  33. }
  34. type T_R struct {
  35. Code int16 `xml:"Code"`
  36. Msg string `xml:"Msg"`
  37. Data T_User `xml:"Data"` // 泛型
  38. }
  39. var t_R T_R
  40. // 验证登录
  41. b_, admin_r := Account.Verification(string(m.Data), "")
  42. if !b_ {
  43. t_R.Code = 201
  44. t_R.Msg = "请重新登陆!"
  45. b, _ := msgpack.Marshal(&t_R)
  46. _ = Nats.Publish(m.Reply, b)
  47. return
  48. }
  49. t_R.Code = 200
  50. t_R.Msg = "ok"
  51. t_R.Data.T_uuid = admin_r.T_uuid
  52. t_R.Data.T_power = admin_r.T_power
  53. t_R.Data.T_name = admin_r.T_name
  54. t_R.Data.T_user = admin_r.T_user
  55. b, _ := msgpack.Marshal(&t_R)
  56. _ = Nats.Publish(m.Reply, b)
  57. })
  58. // 请求-响应 获取所有用户列表
  59. _, _ = Nats.Subscribe("ERP_User_Read_User_List_All", func(m *nats.Msg) {
  60. type T_R struct {
  61. Code int16 `xml:"Code"`
  62. Msg string `xml:"Msg"`
  63. Data []Account.User_R `xml:"Data"` // 泛型
  64. }
  65. var t_R T_R
  66. t_R.Code = 200
  67. t_R.Msg = "ok"
  68. t_R.Data = Account.Read_User_List_All()
  69. b, _ := msgpack.Marshal(&t_R)
  70. _ = Nats.Publish(m.Reply, b)
  71. })
  72. // 请求-响应 获取所有权限列表
  73. _, _ = Nats.Subscribe("ERP_User_Read_Power_List_All", func(m *nats.Msg) {
  74. type T_R struct {
  75. Code int16 `xml:"Code"`
  76. Msg string `xml:"Msg"`
  77. Count int64 `xml:"Count"`
  78. Data []powerlibs.Power_R `xml:"Data"` // 泛型
  79. }
  80. var t_R T_R
  81. t_R.Code = 200
  82. t_R.Msg = "ok"
  83. t_R.Data, t_R.Count = Account.Read_Power_List("", 0, 9999)
  84. b, _ := msgpack.Marshal(&t_R)
  85. _ = Nats.Publish(m.Reply, b)
  86. })
  87. // 发布-订阅 模式,异步订阅 系统日志
  88. _, _ = Nats.Subscribe("ERP_AddSysLogs", func(m *nats.Msg) {
  89. fmt.Printf("ERP_AddSysLogs message: %v\n", string(m.Data))
  90. type T_S struct {
  91. T_class string
  92. T_title string
  93. T_txt string
  94. }
  95. var t_S T_S
  96. err := msgpack.Unmarshal(m.Data, &t_S)
  97. if err != nil {
  98. System.Add_SysLogs("Nats", "Nats AddSysLogs 解析失败", string(m.Data))
  99. return
  100. }
  101. System.Add_SysLogs(t_S.T_class, t_S.T_title, t_S.T_txt)
  102. })
  103. // 发布-订阅 模式,异步订阅 用户日志
  104. _, _ = Nats.Subscribe("ERP_AddUserLogs", func(m *nats.Msg) {
  105. fmt.Printf("ERP_AddUserLogs message: %v\n", string(m.Data))
  106. type T_S struct {
  107. T_uuid string
  108. T_class string
  109. T_title string
  110. T_txt string
  111. }
  112. var t_S T_S
  113. err := msgpack.Unmarshal(m.Data, &t_S)
  114. if err != nil {
  115. System.Add_SysLogs("Nats", "Nats AddUserLogs 解析失败", string(m.Data))
  116. return
  117. }
  118. System.Add_UserLogs(t_S.T_uuid, t_S.T_class, t_S.T_title, t_S.T_txt)
  119. })
  120. // 发布-订阅 模式,异步订阅 消息
  121. _, _ = Nats.Subscribe("ERP_AddNews", func(m *nats.Msg) {
  122. fmt.Printf("ERP_AddNews message: %v\n", string(m.Data))
  123. type T_S struct {
  124. T_uuid string
  125. T_Title string
  126. T_Url string
  127. }
  128. var t_S T_S
  129. err := msgpack.Unmarshal(m.Data, &t_S)
  130. if err != nil {
  131. System.Add_SysLogs("Nats", "Nats AddNews 解析失败", string(m.Data))
  132. return
  133. }
  134. _, err = System.Add_News(System.News{T_uuid: t_S.T_uuid, T_Title: t_S.T_Title, T_Url: t_S.T_Url})
  135. if err != nil {
  136. System.Add_SysLogs("Nats", "Nats AddNews 添加失败", string(m.Data))
  137. return
  138. }
  139. })
  140. }