apolloconfig/apollo.net

热更新失效的问题

zzq361267211 opened this issue · 11 comments

求问一下本组件,
1.是添加了 ChangeToken 的 监听路径吗? c:\opt\data\ {ApolloID} \config-cache
请问这个路径是否可以自己进行配置,可以的化如何设置呢?

另外我的服务中用了别的框架-furion,发现热更新失效了,请问是否也是上文提到的 ChangeToken监听路径被改写后造成的影响呢,我排查以后发现按下文代码处理,可以使热更新重新生效

ChangeToken.OnChange(
() =>
{
var phyFileProvider = new PhysicalFileProvider(@"c:\opt\data\ApolloDemo\config-cache");//TODO:此处路径可配置化处理
IChangeToken changeToken = phyFileProvider.Watch(".");
return changeToken;
}

故推测是 @"c:\opt\data\ApolloDemo\config-cache"); 这个路径被其他框架覆盖,

查找其框架源码后有如下处理的代码
// 配置选项监听
if (typeof(IConfigurableOptionsListener).IsAssignableFrom(optionsType))
{
var onListenerMethod = optionsType.GetMethod(nameof(IConfigurableOptionsListener.OnListener));
if (onListenerMethod != null)
{
// 这里监听的是全局配置(总感觉不对头)
ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () =>
{
var options = optionsConfiguration.Get();
onListenerMethod.Invoke(options, new object[] { options, optionsConfiguration });
});
}
}

请问有没有办法处理呢,还是说必须重新自己绑定监听路径?

Apollo不会监听c:\opt\data\ {ApolloID} \config-cache目录,只会在服务端发布配置后才会触发热更新

那 IOptionMonitor 的的Onchange 事件是监听的 c:\opt\data\ {ApolloID} \config-cache目录 的文件改动吗?
c:\opt\data\ {ApolloID} \config-cache 这个路径是在那里进行的绑定呢? 是那个 ConfigValueJson的库里面做的吗?

不建议直接修改缓存文件,如果想要修改配置建议修改AppSettings.json

在.NET5 当中照着文档做,IOption的 Onchange事件正常,
但是我基于Furion框架(国内一个.NET的框架)下,照着文档做发现 IOption 在 apollo服务端发布了新的配置改动后,连Onchange事件触发不了,我最初在ChangeToken.OnChange中添加了 对c:\opt\data\ {ApolloID} \config-cache的文件改动监听,
发现可以在服务端发布配置改动后正常触发事件。
想问下大佬这样的情况要如何排查这种情况下的 事件触发失效呢?

不建议直接修改缓存文件,如果想要修改配置建议修改AppSettings.json

我这边没有直接对缓存文件做操作,只监听了缓存文件的改动。
正常的做法失效了,才出此下策的

Apollo发布新配置才会更新,没必要监控

请问这个包已经从nuget下架了吗,在nuget 的UI 没有找到,
用命令安装也报了找不到包的错
Install-Package Tuhu.Extensions.Configuration.ValueBinder.Json

PM> Install-Package Tuhu.Extensions.Configuration.ValueBinder.Json
Install-Package : 找不到程序包“Tuhu.Extensions.Configuration.ValueBinder.Json”
所在位置 行:1 字符: 1

  • Install-Package Tuhu.Extensions.Configuration.ValueBinder.Json
  •   + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
      + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
    
    

已用时间: 00:00:00.7385950

已用时间: 00:00:00.7385950

包已经隐藏了,你可以直接编辑csproj添加。
如果你需要JSON支持,请创建json格式的namespace

那如果不靠那个包来绑定的,新的 绑定 option的步骤是?

@zzq361267211 看看是不是这个问题: #203