add
add timed task to synchronize user information by grpc
| | |
| | | return |
| | | } |
| | | |
| | | err := userService.SyncUserInfo() |
| | | if err != nil { |
| | | return |
| | | } |
| | | |
| | | ctx.OkWithDetailed(response.CityResponse{ |
| | | List: cities, |
| | | }) |
| | |
| | | } |
| | | } |
| | | |
| | | func CloseProductServiceConn() { |
| | | if productServiceConn != nil { |
| | | productServiceConn.Close() |
| | | } |
| | | } |
| | | |
| | | // List |
| | | // |
| | | // @Tags 产品 |
| | |
| | | "Issuer": "qmPlus" |
| | | }, |
| | | "GrpcServiceAddr": { |
| | | "Aps": "192.168.20.120:9091" |
| | | "Aps": "192.168.20.120:9091", |
| | | "Admin": "192.168.20.118:50051" |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | GrpcServiceAddr struct { |
| | | Aps string // jwt签名 |
| | | Aps string // aps服务地址 |
| | | Admin string // admin服务地址 |
| | | } |
| | | |
| | | config struct { |
| | |
| | | "aps_crm/router" |
| | | "aps_crm/service" |
| | | "fmt" |
| | | "github.com/robfig/cron/v3" |
| | | "net/http" |
| | | "os" |
| | | "os/signal" |
| | |
| | | go v1.InitProductServiceConn() |
| | | go service.InitUserConn() |
| | | |
| | | c := cron.New() |
| | | c.AddFunc("@every 15s", service.SyncUserInfo) // 每15秒同步一次 |
| | | c.Start() |
| | | |
| | | logx.Error(server.ListenAndServe().Error()) |
| | | } |
| | | |
| | |
| | | signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM) |
| | | <-quit |
| | | |
| | | v1.CloseProductServiceConn() |
| | | service.CloseUserConn() |
| | | |
| | | logx.Infof("aps-admin exited...") |
| | | os.Exit(0) |
| | | } |
| | |
| | | |
| | | return records, nil |
| | | } |
| | | |
| | | func (slf *UserSearch) FirstOrCreate(record User) error { |
| | | var db = slf.build() |
| | | |
| | | if err := db.FirstOrCreate(&User{}, record).Error; err != nil { |
| | | return fmt.Errorf("first or create err: %v, record: %+v", err, record) |
| | | } |
| | | |
| | | return nil |
| | | } |
| | |
| | | "aps_crm/proto/user" |
| | | "context" |
| | | "errors" |
| | | "fmt" |
| | | "google.golang.org/grpc" |
| | | "google.golang.org/grpc/credentials/insecure" |
| | | "gorm.io/gorm" |
| | |
| | | |
| | | func InitUserConn() { |
| | | var err error |
| | | userConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Aps, grpc.WithTransportCredentials(insecure.NewCredentials())) |
| | | userConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Admin, grpc.WithTransportCredentials(insecure.NewCredentials())) |
| | | if err != nil { |
| | | logx.Errorf("grpc dial user service error: %v", err.Error()) |
| | | return |
| | | } |
| | | defer userConn.Close() |
| | | } |
| | | |
| | | func (userService *UserService) SyncUserInfo() (err error) { |
| | | func CloseUserConn() { |
| | | if userConn != nil { |
| | | userConn.Close() |
| | | } |
| | | } |
| | | |
| | | func SyncUserInfo() { |
| | | cli := user.NewUserServiceClient(userConn) |
| | | |
| | | users := []*user.User{ |
| | | // ... fetched users |
| | | } |
| | | var users []*user.User |
| | | |
| | | ctx, cancel := context.WithTimeout(context.Background(), time.Second) |
| | | defer cancel() |
| | |
| | | logx.Fatalf("could not sync users: %v", err) |
| | | } |
| | | |
| | | logx.Infof("Synced: %v, Message: %s", r.List, r.Message) |
| | | fmt.Printf("Synced: %v, Message: %s", r.List, r.Message) |
| | | |
| | | return nil |
| | | for _, member := range r.List { |
| | | err = model.NewUserSearch(nil).FirstOrCreate(model.User{ |
| | | UUID: member.Uuid, |
| | | Username: member.Username, |
| | | UserType: constvar.UserType(member.Usertype), |
| | | NickName: member.Nickname, |
| | | }) |
| | | if err != nil { |
| | | logx.Errorf("sync user error: %v", err.Error()) |
| | | continue |
| | | } |
| | | } |
| | | } |