同样的这里增加对了限速的处理,毕竟日志收集程序不能影响了当前业务的性能,所以增加了limit.go用于限制速度:
package mainimport ("time""sync/atomic""github.com/astaxie/beego/logs")type SecondLimit struct {unixSecond int64curCount int32limit int32}func NewSecondLimit(limit int32) *SecondLimit {secLimit := &SecondLimit{unixSecond:time.Now().Unix(),curCount:0,limit:limit,}return secLimit}func (s *SecondLimit) Add(count int) {sec := time.Now().Unix()if sec == s.unixSecond {atomic.AddInt32(&s.curCount,int32(count))return}atomic.StoreInt64(&s.unixSecond,sec)atomic.StoreInt32(&s.curCount, int32(count))}func (s *SecondLimit) Wait()bool {for {sec := time.Now().Unix()if (sec == atomic.LoadInt64(&s.unixSecond)) && s.curCount == s.limit {time.Sleep(time.Microsecond)logs.Debug("limit is running,limit:%d s.curCount:%d",s.limit,s.curCount)continue}if sec != atomic.LoadInt64(&s.unixSecond) {atomic.StoreInt64(&s.unixSecond,sec)atomic.StoreInt32(&s.curCount,0)}logs.Debug("limit is exited")return false}}小结这次基本实现了日志收集的前半段的处理,后面将把日志扔到es中,并最终在页面上呈现
作者: 红烧不是清蒸
链接: http://www.cnblogs.com/zhaof/p/8910761.html
【Go语言实现海量日志收集系统】
推荐阅读
- 数据库同步软件DBSync的设计与实现
- 阿里大牛纯CSS实现了常见的UI效果,不信你看
- shell脚本判断奇偶数?shell脚本是什么语言
- 这才是你需要的C语言、C++学习路线
- 三国诸葛亮的思维导图?三国诸葛亮的经典语言
- 华为路由器静态NAT配置,实现一对一地址映射,土豪级,收藏转
- 用Spring Boot实现https ssl免密登录
- go语言操作PostgreSQL数据库
- MySQL还能实现分布式锁?
- Spring Boot实现阿里云SMS短信发送功能
