This commit is contained in:
cjd
2025-11-04 21:09:16 +08:00
parent 8260e293c7
commit bb90a020dc
592 changed files with 61749 additions and 27 deletions

View File

@@ -0,0 +1,88 @@
using DouyinApi.Common.Helper;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Nacos.V2;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace DouyinApi.Extensions.NacosConfig
{
/// <summary>
/// Nacos配置文件变更事件
/// </summary>
public class NacosListenConfigurationTask : BackgroundService
{
private readonly INacosConfigService _configClient;
/// <summary>
/// Nacos 配置文件监听事件
/// </summary>
private NacosConfigListener nacosConfigListener = new NacosConfigListener();
/// <summary>
/// 重载方法
/// </summary>
/// <param name="configClient"></param>
/// <param name="serviceProvider"></param>
public NacosListenConfigurationTask(INacosConfigService configClient, IServiceProvider serviceProvider)
{
_configClient = configClient;
}
/// <summary>
/// 执行
/// </summary>
/// <param name="stoppingToken"></param>
/// <returns></returns>
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
try
{
// Add listener
await _configClient.AddListener("blog.Core.Api.json", "DEFAULT_GROUP", nacosConfigListener);
}
catch (Exception)
{
}
}
/// <summary>
/// 停止
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public override async Task StopAsync(CancellationToken cancellationToken)
{
// Remove listener
await _configClient.RemoveListener("blog.Core.Api.json", "DEFAULT_GROUP", nacosConfigListener);
await base.StopAsync(cancellationToken);
}
}
/// <summary>
/// 配置监听事件
/// </summary>
public class NacosConfigListener : IListener
{
/// <summary>
/// 收到配置文件变更
/// </summary>
/// <param name="configInfo"></param>
public void ReceiveConfigInfo(string configInfo)
{
var _configurationBuilder = new ConfigurationBuilder();
_configurationBuilder.Sources.Clear();
var buffer = System.Text.Encoding.Default.GetBytes(configInfo);
System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
_configurationBuilder.AddJsonStream(ms);
var configuration = _configurationBuilder.Build();
ms.Dispose();
// 读取配置 将nacos配置中心读取到的配置 替换掉.net core 内存中的 configuration
// 当前监听到配置配置 应该重新断开 重连 刷新等一些中间件操作
// 比如 mq redis 等其他跟配置相关的中间件
JsonConfigSettings.Configuration = configuration;
}
}
}

View File

@@ -0,0 +1,97 @@
using DouyinApi.Common;
using DouyinApi.Common.Helper;
using Microsoft.Extensions.Hosting;
using Nacos.V2;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace DouyinApi.Extensions.NacosConfig
{
/// <summary>
///
/// </summary>
public class NacosListenNamingTask : BackgroundService
{
private readonly INacosNamingService _nacosNamingService;
/// <summary>
/// 监听事件
/// </summary>
private NamingServiceEventListener eventListener = new NamingServiceEventListener();
/// <summary>
///
/// </summary>
/// <param name="nacosNamingService"></param>
/// <param name="serviceProvider"></param>
/// <param name="configuration"></param>
public NacosListenNamingTask(INacosNamingService nacosNamingService)
{
_nacosNamingService = nacosNamingService;
}
/// <summary>
/// 订阅服务变化
/// </summary>
/// <param name="stoppingToken"></param>
/// <returns></returns>
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
// Add listener
await _nacosNamingService.Subscribe(JsonConfigSettings.NacosServiceName, Nacos.V2.Common.Constants.DEFAULT_GROUP, eventListener);
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 = 1000,// 权重 默认1000
Metadata = JsonConfigSettings.NacosMetadata
};
await _nacosNamingService.RegisterInstance(JsonConfigSettings.NacosServiceName, Nacos.V2.Common.Constants.DEFAULT_GROUP, instance);
ConsoleHelper.WriteSuccessLine($"Nacos connect: Success!");
}
// 程序停止
public override async Task StopAsync(CancellationToken cancellationToken)
{
// Remove listener
await _nacosNamingService.Unsubscribe(JsonConfigSettings.NacosServiceName, Nacos.V2.Common.Constants.DEFAULT_GROUP, eventListener);
await _nacosNamingService.DeregisterInstance(JsonConfigSettings.NacosServiceName, Nacos.V2.Common.Constants.DEFAULT_GROUP, IpHelper.GetCurrentIp(null), JsonConfigSettings.NacosPort);
await base.StopAsync(cancellationToken);
}
}
/// <summary>
/// 服务变更事件监听
/// </summary>
public class NamingServiceEventListener : IEventListener
{
/// <summary>
///
/// </summary>
//public static redisHelper _redisCachqManager = new redisHelper();
/// <summary>
/// 监听事件
/// </summary>
/// <param name="event"></param>
/// <returns></returns>
public Task OnEvent(Nacos.V2.IEvent @event)
{
if (@event is Nacos.V2.Naming.Event.InstancesChangeEvent e)
{
Console.WriteLine($"==========收到服务变更事件=======》{Newtonsoft.Json.JsonConvert.SerializeObject(e)}");
// 配置有变动后 刷新redis配置 刷新 mq配置
//_redisCachqManager.DisposeRedisConnection();
}
return Task.CompletedTask;
}
}
}