Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

热更新失效的问题 #166

Open
zzq361267211 opened this issue Jul 16, 2021 · 11 comments
Open

热更新失效的问题 #166

zzq361267211 opened this issue Jul 16, 2021 · 11 comments

Comments

@zzq361267211
Copy link

求问一下本组件,
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 });
});
}
}

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

@pengweiqhca
Copy link
Contributor

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

@zzq361267211
Copy link
Author

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

@pengweiqhca
Copy link
Contributor

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

@zzq361267211
Copy link
Author

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

@zzq361267211
Copy link
Author

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

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

@pengweiqhca
Copy link
Contributor

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

@zzq361267211
Copy link
Author

zzq361267211 commented Jul 30, 2021

请问这个包已经从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

@pengweiqhca
Copy link
Contributor

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

@zzq361267211
Copy link
Author

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

@czd890
Copy link
Contributor

czd890 commented Jul 28, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants