Sentinel教程进阶六ClusterClientConfigManager
private static SentinelProperty<ClusterClientConfig> clientConfigProperty = new DynamicSentinelProperty<>();
private static SentinelProperty<ClusterClientAssignConfig> clientAssignProperty = new DynamicSentinelProperty<>();
private static final PropertyListener<ClusterClientConfig> CONFIG_PROPERTY_LISTENER
= new ClientConfigPropertyListener();
private static final PropertyListener<ClusterClientAssignConfig> ASSIGN_PROPERTY_LISTENER
= new ClientAssignPropertyListener();
private static final List<ServerChangeObserver> SERVER_CHANGE_OBSERVERS = new ArrayList<>();
static {
bindPropertyListener();
}
private static void bindPropertyListener() {
removePropertyListener();
clientAssignProperty.addListener(ASSIGN_PROPERTY_LISTENER);
clientConfigProperty.addListener(CONFIG_PROPERTY_LISTENER);
}
ClientConfigPropertyListener#
主要监听请求超时时间的改变(sentinel后台管理并没有开放这个属性)
com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfigManager.ClientConfigPropertyListener#configLoad
@Override
public void configLoad(ClusterClientConfig config) {
if (config == null) {
RecordLog.warn("[ClusterClientConfigManager] Empty initial client config");
return;
}
applyConfig(config);
}
com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfigManager.ClientConfigPropertyListener#applyConfig
private synchronized void applyConfig(ClusterClientConfig config) {
if (!isValidClientConfig(config)) {
RecordLog.warn(
"[ClusterClientConfigManager] Invalid cluster client config, ignoring: {}", config);
return;
}
RecordLog.info("[ClusterClientConfigManager] Updating to new client config: {}", config);
updateClientConfigChange(config);
}
}
private static void updateClientConfigChange(ClusterClientConfig config) {
if (config.getRequestTimeout() != requestTimeout) {
requestTimeout = config.getRequestTimeout();
}
}
控制netty请求token时的超时时间
ClientAssignPropertyListener#
主要监听token-client应该连接的token-server的ip和端口
@Override
public void configLoad(ClusterClientAssignConfig config) {
if (config == null) {
RecordLog.warn("[ClusterClientConfigManager] Empty initial client assignment config");
return;
}
applyConfig(config);
}
com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfigManager.ClientAssignPropertyListener#applyConfig
private synchronized void applyConfig(ClusterClientAssignConfig config) {
if (!isValidAssignConfig(config)) {
RecordLog.warn(
"[ClusterClientConfigManager] Invalid cluster client assign config, ignoring: " + config);
return;
}
if (serverPort == config.getServerPort() && config.getServerHost().equals(serverHost)) {
return;
}
RecordLog.info("[ClusterClientConfigManager] Assign to new target token server: {}", config);
updateServerAssignment(config);
}
com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfigManager#updateServerAssignment
private static void updateServerAssignment(/*@Valid*/ ClusterClientAssignConfig config) {
String host = config.getServerHost();
int port = config.getServerPort();
for (ServerChangeObserver observer : SERVER_CHANGE_OBSERVERS) {
observer.onRemoteServerChange(config);
}
serverHost = host;
serverPort = port;
}
com.alibaba.csp.sentinel.cluster.client.DefaultClusterTokenClient#changeServer
private void changeServer(/*@Valid*/ ClusterClientAssignConfig config) {
if (serverEqual(serverDescriptor, config)) {
return;
}
try {
//重启token-client客户端,连接新的token-server
if (transportClient != null) {
transportClient.stop();
}
// Replace with new, even if the new client is not ready.
this.transportClient = new NettyTransportClient(config.getServerHost(), config.getServerPort());
this.serverDescriptor = new TokenServerDescriptor(config.getServerHost(), config.getServerPort());
startClientIfScheduled();
RecordLog.info("[DefaultClusterTokenClient] New client created: {}", serverDescriptor);
} catch (Exception ex) {
RecordLog.warn("[DefaultClusterTokenClient] Failed to change remote token server", ex);
}
}
作者:roylee666
出处:https://www.cnblogs.com/roylee666/p/15847410.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)