using Nacos.V2;
namespace Tiobon.Core.Api.Controllers
{
///
/// 服务管理
///
[Produces("application/json")]
[Route("api/[Controller]/[action]")]
[Authorize(Permissions.Name), ApiExplorerSettings(GroupName = Grouping.GroupName_System)]
public class NacosController : BaseApiController
{
#region 变量
///
/// INacosNamingService
///
private readonly INacosNamingService NacosNamingService;
#endregion
#region 重载
///
///
///
///
public NacosController(INacosNamingService nacosNamingService)
{
NacosNamingService = nacosNamingService;
}
#endregion
///
/// 系统实例是否启动完成
///
///
[HttpGet]
public ServiceResult CheckSystemStartFinish()
{
//********************* 用当前接口做基本健康检查 确定 基础服务 数据库 缓存都已正常启动*****
// 然后再进行服务上线
var data = new ServiceResult();
// *************** 此处请求一下db 跟redis连接等 项目中简介 保证项目已全部启动
data.Success = true;
data.Message = "SUCCESS";
return data;
}
///
/// 获取Nacos 状态
///
///
[HttpGet]
public async Task> GetStatus()
{
var data = new ServiceResult();
var instances = await NacosNamingService.GetAllInstances(JsonConfigSettings.NacosServiceName);
if (instances == null || instances.Count == 0)
{
data.Status = 406;
data.Message = "DOWN";
data.Success = false;
return data;
}
// 获取当前程序IP
var currentIp = IpHelper.GetCurrentIp(null);
bool isUp = false;
instances.ForEach(item =>
{
if (item.Ip == currentIp)
isUp = true;
});
// var baseUrl = await NacosNamingService.GetServerStatus();
if (isUp)
{
data.Status = 200;
data.Message = "UP";
data.Success = true;
return data;
}
else
{
data.Status = 406;
data.Message = "DOWN";
data.Success = false;
return data;
}
}
///
/// 服务上线
///
///
[HttpGet]
public async Task> Register()
{
var data = new ServiceResult();
var instance = new Nacos.V2.Naming.Dtos.Instance()
{
ServiceName = JsonConfigSettings.NacosServiceName,
ClusterName = Nacos.V2.Common.Constants.DEFAULT_CLUSTER_NAME,
Ip = IpHelper.GetCurrentIp(null),
Port = JsonConfigSettings.NacosPort,
Enabled = true,
Weight = 100,
Metadata = JsonConfigSettings.NacosMetadata
};
await NacosNamingService.RegisterInstance(JsonConfigSettings.NacosServiceName, Nacos.V2.Common.Constants.DEFAULT_GROUP, instance);
data.Success = true;
data.Message = "SUCCESS";
return data;
}
///
/// 服务下线
///
///
[HttpGet]
public async Task> Deregister()
{
var data = new ServiceResult();
await NacosNamingService.DeregisterInstance(JsonConfigSettings.NacosServiceName, Nacos.V2.Common.Constants.DEFAULT_GROUP, IpHelper.GetCurrentIp(null), JsonConfigSettings.NacosPort);
data.Success = true;
data.Message = "SUCCESS";
return data;
}
}
}