init
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
97
DouyinApi.Extensions/NacosConfig/NacosListenNamingTask.cs
Normal file
97
DouyinApi.Extensions/NacosConfig/NacosListenNamingTask.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user