using Sers.Core.Module.App;
using Sers.Gover.Base;
using Vit.Core.Module.Log;
using Vit.Core.Util.Threading.Timer;
namespace Vit.Extensions
{
public static partial class ServiceCenter_GoverExtensions
{
///
/// 使用 Gover 服务治理 模块
///
///
public static void UseGover(this Sers.ServiceCenter.ServiceCenter serviceCenter)
{
if (null == serviceCenter) return;
serviceCenter.apiCenterService = GoverApiCenterService.Instance;
serviceCenter.LoadSsApi(typeof(ServiceCenter_GoverExtensions).Assembly);
//注册站点关闭回调
SersApplication.onStop += (GoverApiCenterService.SaveToFile);
#region ApiStation Qps 定时计算
SersApplication.onStart += (QpsTimer_Start);
SersApplication.onStop += (QpsTimer_Stop);
#endregion
}
#region QpsTimer
static int SaveToFile_tick = 0;
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
static void QpsTimer_Calc()
{
//(x.1)计算ApiStation qps
try
{
foreach (var item in GoverApiCenterService.Instance.ApiStation_GetAll())
{
item.QpsCalc();
}
}
catch (System.Exception ex)
{
Logger.Error(ex);
}
//(x.2)计算ServiceStation qps
try
{
foreach (var item in GoverApiCenterService.Instance.serviceStationMng.serviceStationCollection)
{
item.QpsCalc();
}
}
catch (System.Exception ex)
{
Logger.Error(ex);
}
//(x.3)按需保存计数信息到文件
try
{
SaveToFile_tick++;
if (SaveToFile_tick > 10)
{
SaveToFile_tick = 0;
GoverApiCenterService.SaveToFile();
}
}
catch (System.Exception ex)
{
Logger.Error(ex);
}
}
static VitTimer timer = null;
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
static void QpsTimer_Start()
{
if (null != timer) return;
timer = new VitTimer
{
intervalMs = 2000,
timerCallback =
(object obj) =>
{
QpsTimer_Calc();
}
};
timer.Start();
}
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
static void QpsTimer_Stop()
{
try
{
if (null != timer)
{
timer.Stop();
timer.Dispose();
timer = null;
}
}
catch (System.Exception ex)
{
Logger.Error(ex);
}
}
#endregion
}
}