message update

This commit is contained in:
Gordon 2021-08-06 14:56:41 +08:00
parent bfc28cab8a
commit b36c041d35
6 changed files with 43 additions and 19 deletions

View File

@ -32,7 +32,7 @@ func loggerInit(moduleName string) *Logger {
logger.SetLevel(logrus.TraceLevel) logger.SetLevel(logrus.TraceLevel)
//Log Style Setting //Log Style Setting
logger.SetFormatter(&nested.Formatter{ logger.SetFormatter(&nested.Formatter{
TimestampFormat: "2006-01-02 15:04:05", TimestampFormat: "2006-01-02 15:04:05.000",
HideKeys: false, HideKeys: false,
FieldsOrder: []string{"PID"}, FieldsOrder: []string{"PID"},
}) })
@ -58,7 +58,7 @@ func NewLfsHook(rotationTime time.Duration, maxRemainNum uint, moduleName string
logrus.WarnLevel: initRotateLogs(rotationTime, maxRemainNum, "warn", moduleName), logrus.WarnLevel: initRotateLogs(rotationTime, maxRemainNum, "warn", moduleName),
logrus.ErrorLevel: initRotateLogs(rotationTime, maxRemainNum, "error", moduleName), logrus.ErrorLevel: initRotateLogs(rotationTime, maxRemainNum, "error", moduleName),
}, &nested.Formatter{ }, &nested.Formatter{
TimestampFormat: "2006-01-02 15:04:05", TimestampFormat: "2006-01-02 15:04:05.000",
HideKeys: false, HideKeys: false,
FieldsOrder: []string{"PID"}, FieldsOrder: []string{"PID"},
}) })

View File

@ -8,7 +8,7 @@ import (
func main() { func main() {
rpcPort := flag.Int("rpc_port", 10500, "rpc listening port") rpcPort := flag.Int("rpc_port", 10500, "rpc listening port")
wsPort := flag.Int("ws_port", 10800, "rpc listening port") wsPort := flag.Int("ws_port", 10800, "ws listening port")
flag.Parse() flag.Parse()
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(1) wg.Add(1)

View File

@ -66,9 +66,6 @@ func (mc *HistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey string)
if err != nil { if err != nil {
log.ErrorByKv("data insert to mongo err", pbSaveData.OperationID, "data", pbSaveData.String(), "err", err.Error()) log.ErrorByKv("data insert to mongo err", pbSaveData.OperationID, "data", pbSaveData.String(), "err", err.Error())
} }
pbSaveData.Options = pbData.Options
pbSaveData.OfflineInfo = pbData.OfflineInfo
sendMessageToPush(&pbSaveData)
} else if msgKey == pbSaveData.SendID { } else if msgKey == pbSaveData.SendID {
err := saveUserChat(pbData.SendID, &pbSaveData) err := saveUserChat(pbData.SendID, &pbSaveData)
if err != nil { if err != nil {
@ -82,11 +79,19 @@ func (mc *HistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey string)
} }
} }
if msgKey == pbSaveData.RecvID {
pbSaveData.Options = pbData.Options
pbSaveData.OfflineInfo = pbData.OfflineInfo
sendMessageToPush(&pbSaveData)
}
log.InfoByKv("msg_transfer handle topic success...", "", "") log.InfoByKv("msg_transfer handle topic success...", "", "")
} else if pbData.SessionType == constant.GroupChatType { } else if pbData.SessionType == constant.GroupChatType {
log.Info("", "", "msg_transfer chat type = GroupChatType") log.Info("", "", "msg_transfer chat type = GroupChatType")
uidAndGroupID := strings.Split(pbData.RecvID, " ") if isHistory {
saveUserChat(uidAndGroupID[0], &pbSaveData) uidAndGroupID := strings.Split(pbData.RecvID, " ")
saveUserChat(uidAndGroupID[0], &pbSaveData)
}
pbSaveData.Options = pbData.Options pbSaveData.Options = pbData.Options
pbSaveData.OfflineInfo = pbData.OfflineInfo pbSaveData.OfflineInfo = pbData.OfflineInfo
sendMessageToPush(&pbSaveData) sendMessageToPush(&pbSaveData)
@ -108,6 +113,7 @@ func (mc *HistoryConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession,
return nil return nil
} }
func sendMessageToPush(message *pbMsg.MsgSvrToPushSvrChatMsg) { func sendMessageToPush(message *pbMsg.MsgSvrToPushSvrChatMsg) {
log.InfoByKv("msg_transfer send message to push", message.OperationID, "message", message.String())
msg := pbPush.PushMsgReq{} msg := pbPush.PushMsgReq{}
msg.OperationID = message.OperationID msg.OperationID = message.OperationID
msg.PlatformID = message.PlatformID msg.PlatformID = message.PlatformID

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
package pbChat; package pbChat;//The package name to which the proto file belongs
option go_package = "chat;pbChat"; option go_package = "chat;pbChat";//The generated go pb file is in the current directory, and the package name is pbChat
message WSToMsgSvrChatMsg{ message WSToMsgSvrChatMsg{
string SendID = 1; string SendID = 1;

View File

@ -41,6 +41,7 @@ type MsgCallBackResp struct {
} }
func (rpc *rpcChat) UserSendMsg(_ context.Context, pb *pbChat.UserSendMsgReq) (*pbChat.UserSendMsgResp, error) { func (rpc *rpcChat) UserSendMsg(_ context.Context, pb *pbChat.UserSendMsgReq) (*pbChat.UserSendMsgResp, error) {
log.InfoByKv("sendMsg", pb.OperationID, "args", pb.String())
serverMsgID := GetMsgID(pb.SendID) serverMsgID := GetMsgID(pb.SendID)
pbData := pbChat.WSToMsgSvrChatMsg{} pbData := pbChat.WSToMsgSvrChatMsg{}
pbData.MsgFrom = pb.MsgFrom pbData.MsgFrom = pb.MsgFrom
@ -59,7 +60,7 @@ func (rpc *rpcChat) UserSendMsg(_ context.Context, pb *pbChat.UserSendMsgReq) (*
pbData.MsgID = serverMsgID pbData.MsgID = serverMsgID
pbData.OperationID = pb.OperationID pbData.OperationID = pb.OperationID
pbData.Token = pb.Token pbData.Token = pb.Token
pbData.SendTime = utils.GetCurrentTimestampBySecond() pbData.SendTime = utils.GetCurrentTimestampByNano()
replay := pbChat.UserSendMsgResp{} replay := pbChat.UserSendMsgResp{}
m := MsgCallBackResp{} m := MsgCallBackResp{}
if config.Config.MessageCallBack.CallbackSwitch { if config.Config.MessageCallBack.CallbackSwitch {
@ -84,16 +85,22 @@ func (rpc *rpcChat) UserSendMsg(_ context.Context, pb *pbChat.UserSendMsgReq) (*
return returnMsg(&replay, pb, m.ResponseErrCode, m.ErrMsg, "", 0) return returnMsg(&replay, pb, m.ResponseErrCode, m.ErrMsg, "", 0)
} else { } else {
pbData.Content = m.ResponseResult.ModifiedMsg pbData.Content = m.ResponseResult.ModifiedMsg
rpc.sendMsgToKafka(&pbData, pbData.RecvID) err1 := rpc.sendMsgToKafka(&pbData, pbData.RecvID)
rpc.sendMsgToKafka(&pbData, pbData.SendID) err2 := rpc.sendMsgToKafka(&pbData, pbData.SendID)
if err1 != nil || err2 != nil {
return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0)
}
return returnMsg(&replay, pb, 0, "", serverMsgID, pbData.SendTime) return returnMsg(&replay, pb, 0, "", serverMsgID, pbData.SendTime)
} }
} }
} else { } else {
switch pbData.SessionType { switch pbData.SessionType {
case constant.SingleChatType: case constant.SingleChatType:
rpc.sendMsgToKafka(&pbData, pbData.RecvID) err1 := rpc.sendMsgToKafka(&pbData, pbData.RecvID)
rpc.sendMsgToKafka(&pbData, pbData.SendID) err2 := rpc.sendMsgToKafka(&pbData, pbData.SendID)
if err1 != nil || err2 != nil {
return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0)
}
return returnMsg(&replay, pb, 0, "", serverMsgID, pbData.SendTime) return returnMsg(&replay, pb, 0, "", serverMsgID, pbData.SendTime)
case constant.GroupChatType: case constant.GroupChatType:
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
@ -138,11 +145,17 @@ func (rpc *rpcChat) UserSendMsg(_ context.Context, pb *pbChat.UserSendMsgReq) (*
groupID := pbData.RecvID groupID := pbData.RecvID
for i, v := range reply.MemberList { for i, v := range reply.MemberList {
pbData.RecvID = v.UserId + " " + groupID pbData.RecvID = v.UserId + " " + groupID
rpc.sendMsgToKafka(&pbData, utils.IntToString(i)) err := rpc.sendMsgToKafka(&pbData, utils.IntToString(i))
if err != nil {
return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0)
}
} }
for i, v := range addUidList { for i, v := range addUidList {
pbData.RecvID = v + " " + groupID pbData.RecvID = v + " " + groupID
rpc.sendMsgToKafka(&pbData, utils.IntToString(i+1)) err := rpc.sendMsgToKafka(&pbData, utils.IntToString(i+1))
if err != nil {
return returnMsg(&replay, pb, 201, "kafka send msg err", "", 0)
}
} }
return returnMsg(&replay, pb, 0, "", serverMsgID, pbData.SendTime) return returnMsg(&replay, pb, 0, "", serverMsgID, pbData.SendTime)
default: default:
@ -153,12 +166,12 @@ func (rpc *rpcChat) UserSendMsg(_ context.Context, pb *pbChat.UserSendMsgReq) (*
return returnMsg(&replay, pb, 203, "unkonwn sessionType", "", 0) return returnMsg(&replay, pb, 203, "unkonwn sessionType", "", 0)
} }
func (rpc *rpcChat) sendMsgToKafka(m *pbChat.WSToMsgSvrChatMsg, key string) { func (rpc *rpcChat) sendMsgToKafka(m *pbChat.WSToMsgSvrChatMsg, key string) error {
pid, offset, err := rpc.producer.SendMessage(m, key) pid, offset, err := rpc.producer.SendMessage(m, key)
if err != nil { if err != nil {
log.ErrorByKv("kafka send failed", m.OperationID, "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key) log.ErrorByKv("kafka send failed", m.OperationID, "send data", m.String(), "pid", pid, "offset", offset, "err", err.Error(), "key", key)
} }
return err
} }
func GetMsgID(sendID string) string { func GetMsgID(sendID string) string {
t := time.Now().Format("2006-01-02 15:04:05") t := time.Now().Format("2006-01-02 15:04:05")

View File

@ -26,6 +26,11 @@ func UnixSecondToTime(second int64) time.Time {
return time.Unix(second, 0) return time.Unix(second, 0)
} }
//Convert nano timestamp to time.Time type
func UnixNanoSecondToTime(nanoSecond int64) time.Time {
return time.Unix(0, nanoSecond)
}
//Get the current timestamp by Nano //Get the current timestamp by Nano
func GetCurrentTimestampByNano() int64 { func GetCurrentTimestampByNano() int64 {
return time.Now().UnixNano() return time.Now().UnixNano()