tars framework 源码解读(五) framework 部分章节。NotifyServer 通知服务

_maxPageSize /tars/hash<max_page_size> 配置中默认是29

_maxPageNum /tars/hash<max_page_num> 配置中默认是30

过滤条件。配在 /tars/filter

 

 

NotifyF.tars 接口实现

 

reportServer 框架上报的信息, 保存于数据库中

实际执行的函数是 reportNotifyInfo.此种模式下如下:

1、上报的内容是sResult中,检查服务的过滤规则,如果上报内容的在过滤中,此次上报取消.

2、将上报内容生成sql语句,写入 "t_server_notifys"中。

 

看了下此函数使用之处 几乎都是NodeServer中操作完毕之后,会调用此函数 上报操作内容。

 

notifyServer 业务上报的信息, 用于报警

此函数看调用处.貌似已废弃。替换成reportNotifyInfo

 

实际执行的函数是 reportNotifyInfo.此种模式下如下:

将内容格式整理下,存在 内存的。g_notifyHash 中。

这里的写法比较有意思的地方是,g_notifyHash TarsHashMap<NotifyKey, NotifyInfo, ThreadLockPolicy, MemStorePolicy>类型,此数据结构设计的比较牛逼,进程重启也不会丢数据。

key {

NotifyKey stKey0;

stKey0.name = info.sApp + info.sServer;

stKey0.ip = current->getIp();

stKey0.page = 0;

}

一直都是在拿第0页做开始。第0页没满,直接塞到第0页的NotifyInfo.notifyItems这个vector中。若第0页满了(判断满的条件是 NotifyInfo.notifyItems.size()>=_maxPageSize)则将第0页置换出去.被置换的页码是从1-_maxPageNum-1.轮询过去。。

 

getNotifyInfo 获取上报信息

从上面的 g_notifyHash 读取对应内容。

根据指定的NotifyKey

{

name;//(app+server)

ip;

page;//页码

}

根据此key获取指定g_notifyHash的内容。。

未看到调用之处.

 

reportNotifyInfo 上报框架信息以及业务告警信息

此函数是reportServernotifyServer的具体实现。详细看上面介绍。

 

看代码实现。。TarsRemoteNotify中的 TarsRemoteNotify::notify()TarsRemoteNotify::report()全部都是执行的REPORT类型了。也就是全部都是 reportServer了??这么奇怪的吗?

 

 

LoadDbThread db加载set相关信息的线程类

定时频率30s一次. t_server_conf 中读取 所有服务的set方面信息。并用

app+server+nodename 做可以;set_name+set_area+set_groupvalue。放在缓存中。

这个set信息用于在 notifyServerreportServer时生成的上报数据里面的sSet字段所用.

 

 

原文地址:https://www.cnblogs.com/yylingyao/p/12198397.html