需求描述

今天在做一个定时任务数据同步的需求,定时任务是一个单独的微服务,部署了多套,但是全部的可执行任务是在项目启动的时候,加载到内存中进行任务执行。

在这个时候,当在后台管理进行定时任务操作的时候,比如:修改、新增、删除操作,需要把最新数据同步给全部的定时任务微服务实例,来更新最新数据。

后台管理如下图:
在这里插入图片描述

这个数据同步的思路大概是这个样子的,当对定时任务数据进行了:新增、修改、删除操作,执行完这些操作之后,调用sync()方法,用 HTTP 的方式来通知其他定时任务微服务实例,然后达到数据同步的目的。

那么这里就会涉及一个问题,怎么拿到全部定时任务微服务实例列表呢? 只有知道定时任务全部的微服务实例,获取到 IP + Port 信息才能发起 HTTP 调用。

解决办法

首先,我们微服务注册中心用的是:Nacos,本文就用 Nacos 的解决方式。

如果读过 Nacos 源码的同学应该知道,在 Nacos 里面会有 NacosNamingService 类,这个类的作用可以注册实例,销毁实例、当然同时也可以查询实例。如果还没有读过 Nacos 源码的同学,可以看一看小编我出的 Nacos 源码精讲 的课程,保证收获满满,点击查看

知道NacosNamingService类之后,该如何创建这个类呢? 代码如下:

@Configuration
@AllArgsConstructor
public class NacosNamingServiceConfig {

    private final NacosDiscoveryProperties nacosDiscoveryProperties;

    @Bean
    public NacosNamingService nacosNamingService() {
        try {
            NacosNamingService service = new NacosNamingService(nacosDiscoveryProperties.getNacosProperties());
            return service;
        } catch (NacosException e) {
            e.printStackTrace();
        }
        return null;
    }
}

创建好这个对象之后,我们就可以使用了,如下图:
在这里插入图片描述

NacosNamingService Bean 对象注入进来,然后调用它原生的 getAllInstances 方法,就可以从 Nacos 获取到相对应微服务的全部实例信息了。

所以呀,平时好好学习源码是很有必要的噢,学习底层源码可能有同学会觉得比较复杂和枯燥,门槛比较高。读过众多框架源码,之所以 Nacos 能够打动我为它专门写一本小册,就是因为 Nacos 底层源码读起来非常“清爽”,也包括了很多巧妙的设计思想,这些都很值得你学习。
哪怕是之前从来没有阅读过源码的同学,只要跟着本小册的思路和讲解,都能完全掌握,完全不用担心!同时,本小册也会讲解我们应该如何去正确地学习源码,只有掌握了正确的方式,在源码学习过程中才不会枯燥乏味,并且能够坚持下去!

如果你感兴趣的话 点击查看详情,保证你会对 Nacos 有更加深刻的认识和理解。

GitHub 加速计划 / na / nacos
29.83 K
12.75 K
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:3 个月前 )
4334cd16 * Support custom client configuration timeout.(#12748) * Add UT.(#12748) 10 天前
b04d2266 14 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐