glogcenter/glc/rabbitmq/consume/amqp_log_handle.go
2023-09-22 15:43:09 +08:00

90 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* RabbitMQ日志接收封装
*/
package consume
import (
"glc/conf"
"glc/ldb"
"glc/ldb/storage/logdata"
"glc/www/controller"
"sync"
"github.com/gotoeasy/glang/cmn"
)
type RabbitMQConsume struct {
rabbitMQ *RabbitMQ
mu sync.Mutex // 锁
}
var rabbitMQConsume *RabbitMQConsume
func init() {
rabbitMQConsume = new(RabbitMQConsume)
cmn.OnExit(onExit)
}
func StartRabbitMQConsume() error {
if rabbitMQConsume.rabbitMQ != nil && !rabbitMQConsume.rabbitMQ.closing {
return nil
}
rabbitMQConsume.mu.Lock()
defer rabbitMQConsume.mu.Unlock()
if rabbitMQConsume.rabbitMQ != nil && !rabbitMQConsume.rabbitMQ.closing {
return nil
}
mq, err := NewSimpleRabbitMQ()
if err != nil {
return err
} else {
rabbitMQConsume.rabbitMQ = mq
rabbitMQConsume.rabbitMQ.StartConsume(fnAmqpJsonLogHandle)
}
return nil
}
func StopRabbitMQConsume() {
if rabbitMQConsume.rabbitMQ != nil {
rabbitMQConsume.rabbitMQ.Close()
}
}
func fnAmqpJsonLogHandle(jsonLog string, err error) bool {
if err != nil {
cmn.Error(err)
return false
}
// cmn.Debug("接收到rabbitmq的日志", jsonLog)
md := &logdata.LogDataModel{}
if conf.IsAmqpJsonFormat() {
if md.LoadJson(jsonLog) != nil {
md.Text = jsonLog // 错误的json字符串当文本吃掉
}
} else {
md.Text = jsonLog
}
engine := ldb.NewDefaultEngine()
md.Text = cmn.Trim(md.Text)
engine.AddLogDataModel(md)
if conf.IsClusterMode() {
go controller.TransferGlc(md.ToJson()) // 转发其他GLC服务
}
return true
}
func onExit() {
rabbitMQConsume.mu.Lock()
defer rabbitMQConsume.mu.Unlock()
rabbitMQConsume.rabbitMQ.Close()
}