[RPC学习]Dubbo+nacos实现动态更新内存RTree

1.背景

服务架构一般都是从 单体架构 -> 微服务架构 -> 分布式架构 的迭代,我上一家公司就是在业务发展到一定规模时,开始拆老的单体服务,按业务维度拆成多个微服务,服务之间用的是HTTP请求,通常要求接口RT在200ms以内。目前的公司已经是分布式架构了,服务之间接口RT通常要求20ms以内。所以趁着清明节放假的时间,学一学现在开源的RPC框架Dubbo。

2.问题

之前LBS笔记写了怎么用RTree判断点在多边形内:【LBS学习笔记2】RTree判断点在多边形内-Java版本

个人学习的时候是可用的,但是在企业部署时会存在一个问题:线上服务器都是集群部署的,多台机器,如果需要更新内存RTree的数据,可以手动一台一台重启服务器,或者是一个个调更新接口去刷新。这样就很浪费人力了,我们需要的是自动化更新。所以我调研之后,发现可以用配置中心动态更新配置,使得每台机器都能pull到更新数据,根据这个特性,就能刷新所有机器的内存配置了。

3.准备

4.具体细节

4.1 nacos注册中心部署

从GitHub上下载最新的nacos压缩包,解压后,进到bin目录下,执行startup.sh脚本,启动命令为:

sh startup.sh -m standalone(以单机模式运行)

我这里将nacos部署在华为云上的,注意部署后要将端口8848加到安全组里,然后访问nacos控制台地址:

http://[你的IP]:8848/nacos/#/login,登录名和密码都是nacos,登录后就能看到页面了

在这里插入图片描述

nacos不仅能作为注册中心,也能用作配置中心,支持服务配置动态更新。

4.2 服务监听配置

如上图,我新建了个配置,Data Id叫:dubbo-config:rtree.properties,配置文件里再随便写点内容。然后开始搞服务端开发,写到这我发现如果只关注配置中心的动态更新的话,不需要了解Dubbo,只关注nacos使用就可以了,囧…

点上图示例代码 按钮就能看到Java代码调用怎么写了,这里我写了一个监听配置的示例:

    @PostConstruct
    public String getConfig() throws NacosException, InterruptedException {
        String serverAddr = "http://你的IP";
        String dataId = "dubbo-config:rtree.properties";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId, group, 5000);
        log.info("启动时nacos配置:{}", content);

        configService.addListener(dataId, group, new Listener() {
            @Override
            public void receiveConfigInfo(String configInfo) {
                log.info("动态监听配置:{}", configInfo);
                //监听配置后可以做重建RTree操作了
                rTreeService.rebuild();
            }

            @Override
            public Executor getExecutor() {
                return null;
            }
        });
        return content;
    }

4.3 实践

部署2个服务连接nacos配置中心,部署架构是:

然后在nacos控制台修改一下配置的值,查看服务日志,可以看到2个服务都监听到配置变更了

5.FAQ

  1. Dubbo消费者服务启动时报错No provider available for the service?

    如果你的Dubbo生产者部署在云服务器上,在注册到nacos上时,IP显示的是内网IP,就会报这个问题。具体解决并办法是修改服务器上的hosts文件,服务器名对应的IP改为公网IP,重启服务即可。

欢迎关注我的技术公众号:卷福同学
技术文章第一时间会在公众号上发布哦~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷福同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值