mgo_config.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package mgodb
  2. import (
  3. "context"
  4. "github.com/qiniu/qmgo"
  5. "github.com/qiniu/qmgo/options"
  6. mgoptions "go.mongodb.org/mongo-driver/mongo/options"
  7. )
  8. var (
  9. ConnectTimeoutMS = int64(3000)
  10. SocketTimeoutMS = int64(500000)
  11. MaxPoolSize = uint64(50)
  12. MinPoolSize = uint64(0)
  13. )
  14. //func init() {
  15. // fmt.Println("start MgoNewClient")
  16. // MgoNewClient()
  17. // fmt.Println("end MgoNewClient")
  18. //}
  19. type MgoConfig struct {
  20. Host string `json:"host"`
  21. Port string `json:"port"`
  22. Username string `json:"username"`
  23. Password string `json:"password"`
  24. AuthSource string `json:"authSource"`
  25. Database string `json:"database"`
  26. }
  27. // MgoNewClient
  28. // @Description: 创建一个mongodb客户端链接
  29. // @author: Roc
  30. // @datetime 2024-04-25 14:01:14
  31. // @return *qmgo.Client
  32. func MgoNewClient(mgoConfig MgoConfig) *qmgo.Client {
  33. // 创建cmdMonitor,用于打印SQL
  34. //startedCommands := make(map[int64]bson.Raw)
  35. /*startedCommands := sync.Map{} // map[int64]bson.Raw
  36. cmdMonitor := &event.CommandMonitor{
  37. Started: func(_ context.Context, evt *event.CommandStartedEvent) {
  38. startedCommands.Store(evt.RequestID, evt.Command)
  39. //startedCommands[evt.RequestID] = evt.Command
  40. },
  41. Succeeded: func(_ context.Context, evt *event.CommandSucceededEvent) {
  42. //log.Printf("Command: %v Reply: %v\n",
  43. // startedCommands[evt.RequestID],
  44. // evt.Reply,
  45. //)
  46. var commands bson.Raw
  47. v, ok := startedCommands.Load(evt.RequestID)
  48. if ok {
  49. commands = v.(bson.Raw)
  50. }
  51. utils.MongoLog.Info("\n【MongoDB】[%.3fms] [%v] %v \n", float64(evt.Duration)/1e6, commands, evt.Reply)
  52. },
  53. Failed: func(_ context.Context, evt *event.CommandFailedEvent) {
  54. //log.Printf("Command: %v Failure: %v\n",
  55. // startedCommands[evt.RequestID],
  56. // evt.Failure,
  57. //)
  58. var commands bson.Raw
  59. v, ok := startedCommands.Load(evt.RequestID)
  60. if ok {
  61. commands = v.(bson.Raw)
  62. }
  63. utils.MongoLog.Info("\n【MongoDB】[%.3fms] [%v] \n %v \n", float64(evt.Duration)/1e6, commands, evt.Failure)
  64. },
  65. }*/
  66. // 创建options
  67. ops := options.ClientOptions{ClientOptions: &mgoptions.ClientOptions{}}
  68. //ops.SetMonitor(cmdMonitor)
  69. ctx := context.Background()
  70. //mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@mongodb0.example.com/?authSource=admin&replicaSet=myRepl
  71. var mongoUrl string
  72. if mgoConfig.Password != "" {
  73. mongoUrl = "mongodb://" + mgoConfig.Username + ":" + mgoConfig.Password + "@" +
  74. mgoConfig.Host + ":" + mgoConfig.Port
  75. if mgoConfig.AuthSource != `` {
  76. mongoUrl += mongoUrl + "?&authSource=" + mgoConfig.AuthSource
  77. }
  78. } else {
  79. mongoUrl = "mongodb://" + mgoConfig.Host + ":" + mgoConfig.Port
  80. }
  81. // 创建一个数据库链接
  82. client, err := qmgo.NewClient(ctx, &qmgo.Config{
  83. Uri: mongoUrl,
  84. Database: mgoConfig.Database,
  85. ConnectTimeoutMS: &ConnectTimeoutMS,
  86. SocketTimeoutMS: &SocketTimeoutMS,
  87. MaxPoolSize: &MaxPoolSize,
  88. MinPoolSize: &MinPoolSize,
  89. }, ops)
  90. if err != nil {
  91. panic("MongoDB连接异常:" + err.Error())
  92. }
  93. return client
  94. }
  95. func MgoGetColl(collName string) (cli *qmgo.QmgoClient, err error) {
  96. ctx := context.Background()
  97. config := &qmgo.Config{
  98. //Uri: MGO_URL,
  99. //Database: MGO_DB,
  100. Coll: collName,
  101. ConnectTimeoutMS: &ConnectTimeoutMS,
  102. SocketTimeoutMS: &SocketTimeoutMS,
  103. MaxPoolSize: &MaxPoolSize,
  104. MinPoolSize: &MinPoolSize,
  105. }
  106. cli, err = qmgo.Open(ctx, config)
  107. return
  108. }