ntinel1.8之nacos持久化之授权与热点规则序列化问题

更新时间:2023-05-16 16:53:27 阅读: 评论:0

ntinel1.8之nacos持久化之授权与热点规则序列化问题
ntinel 1.8之nacos持久化之授权与热点规则序列化问题
ntinel持久化之nacos原理
上图就是官⽅的图,其实原理就是通过ntinel-dashboard的管理后台去进⾏控制,然后将修改后的数据发送到各个数据源中,⽐如我们这⾥⽤的nacos,当然还可以有其他的。DataSource 数据源扩展常见的实现⽅式有:
1. 拉模式:客户端主动向某个规则管理中⼼定期轮询拉取规则,这个规则中⼼可以是 RDBMS、⽂件,甚⾄是 VCS 等。这样做的⽅式第一英文
是简单,缺点是⽆法及时获取变更;
2. 推模式:规则中⼼统⼀推送,客户端通过注册监听器的⽅式时刻监听变化,⽐如使⽤ Nacos、Zookeeper 等配置中⼼。这种⽅式有
更好的实时性和⼀致性保证。
具体来说是跟nacos和zookeeper的“推”的特性有关,严格的来说nacos不是算推,也是拉,只不过这个请求是长轮询,服务器端hang 住,然后有更新了⽴马返回⽽已,具体可以看我的nacos的⽂章,有相关解析。⽽zookeeper才是所谓的推,通过watch机制,就是远程的发布订阅机制,有改变就通过⽹络发送数据到客户端。野人张四一
简单的流程就是这样:
说完了这个原理就是怎么做这个持久化了,这个⽹上很多⽂章讲了,我就不说了,我说这些⽅案实现的坑,这些他们没说,但是你真的去做就会发现问题了。⽐如授权与热点规则序列化问题。
授权与热点规则序列化问题
AuthorityRuleNacosProvider的publish问题
我直接贴代码了,如果按照正常的情况,你会发现客户端的JsonConverter是解析不出来的,因为AuthorityRule是套在AuthorityRuleEntity⾥⾯的,解出来的AuthorityRule都是默认的值,所以我们要进⾏⼀下转换,将AuthorityRuleEntity中的AuthorityRule提取出来序列化存到nacos,这样客户端拿到的就是AuthorityRule序列化的,就可以解出来了,其实你也可以参考内存数据源的⽅式,他就是这么做
的,具体不清楚的要看下源码了解下:
@Override
一个数的倍数public void publish(String appName, List<AuthorityRuleEntity> rules)throws Exception {
if(rules == null){
return;
}
String data = JSONString(
rules.stream().map(r -> r.toRule()).List()));
configService.publishConfig(appName + NacosConfigUtil.AUTHORITY_DATA_ID_POSTFIX,
appName + NacosConfigUtil.GROUP_ID, data);
蓝色康乃馨
}
AuthorityRuleNacosProvider的getRules问题
cdr是什么格式
当然获取AuthorityRule的数组后要转成AuthorityRuleEntity的数组才可以在页⾯上展⽰,所以需要以下的转换:
@Override
public List<AuthorityRuleEntity>getRules(String appName)throws Exception {
String rules = Config(appName + NacosConfigUtil.AUTHORITY_DATA_ID_POSTFIX,
appName + NacosConfigUtil.GROUP_ID, TimeoutMs());
if(StringUtil.isEmpty(rules)){
福满人间return new ArrayList<>();
}
List<AuthorityRule> authorityRules = JSON.parArray(rules, AuthorityRule.class);
List<AuthorityRuleEntity> authorityRuleEntities = Optional.ofNullable(authorityRules).map(r -> r.stream()
.map(e -> AuthorityRuleEntity.fromAuthorityRule(appName, null, null, e))
移镜头.List())
).orEl(null);
return authorityRuleEntities;
}
热点规则也⼀样,相同的改法。
持久化配置的5种规则
当然你可以不这样改,直接改客户端也可以啦,只要你服务端和客户端能解析即可。最后5种配置的结果应该是这样:
客户端debug推到的规则
放手吧

本文发布于:2023-05-16 16:53:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/656457.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:规则   客户端   序列化   热点   数据源   问题   需要   授权
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图