在 springboot 项目中不同局域网下限制由 @Configuration 或者 @Component 注解装配的类内的定时任务的是否可执行方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yoloMiss
V2EX    Java

在 springboot 项目中不同局域网下限制由 @Configuration 或者 @Component 注解装配的类内的定时任务的是否可执行方法

  •  
  •   yoloMiss 2023-10-08 21:11:55 +08:00 1847 次点击
    这是一个创建于 737 天前的主题,其中的信息可能已经有所发展或是发生改变。
    由题所示:
    现在碰到个这么个问题,有三个不同段的局域网,并且项目中有多个定时任和 kafka 的消费端,三个网段中部署的是同一套代码,但是又不希望某几个定时任务( kafka 消费端)在其中一个或者两个网段中执行。有没有比较简洁或者其他的方式限制一下定时任务( kafka 消费)的执行。
    目前使用的是 ConditionalOnProperty 注解通过配置文件配置环境名区分做限制,但是这样每次部署新包后( k8s )都要手动改一下项目的 yaml 文件,这样不太优雅,希望大佬能给个更优雅省力的方案。
    第 1 条附言    2023-10-09 19:34:54 +08:00
    补充一下:
    1.是三个不同 ip 段下的三个不同的集群,互不相通
    2.是集群中的一个 springboot 服务中的由 @Scheduled 注解管理的定时任务( kafka 消费端),当然定时任务和 kafka 消费端都是由 @Configuration 或者 @Component 注入的。
    12 条回复    2023-10-10 08:54:21 +08:00
    Dlin
        1
    Dlin  
       2023-10-08 22:39:46 +08:00 via Android
    没用过 kafka 。。你说的定时任务是指由 kafka 队列中在某个时间推入一条消息来触发的执行吗?
    guodongbin
        2
    guodongbin  
       2023-10-09 08:12:59 +08:00
    可以试试环境变量,不过判断逻辑需要改下
    litchinn
        3
    litchinn  
       2023-10-09 09:36:39 +08:00
    没有特别看懂你的环境

    你这三个局域网是同一个集群呢还是有三个集群呢
    我理解中你是一个集群,三个服务节点使用同一个 yaml 配置文件,你是如何通过修改 yaml 来指定某个节点读取到对应配置的呢? k8s 可以指定节点部署(虽然我觉得服务设计上不应该关心具体节点),但是读取的不都是同一个 yaml 吗

    我觉得可以 ConditionalOnProperty 中使用 hostname 来判断,havingValue 设置 hostname 的值
    dej2vu
        4
    dej2vu  
       2023-10-09 09:56:32 +08:00
    sl450282169
        5
    sl450282169  
       2023-10-09 11:41:47 +08:00
    可以实现 Import 接口,根据获取到的不同 ip 段(前提是你的三个局域网 ip 段不一样),来分别注入不同的 bean.或者简单点,直接手写一个 @bean,手动根据 ip 来返回不同的 bean
    newaccount
        6
    newaccount  
       2023-10-09 13:07:14 +08:00
    建议不要用,定时任务交给 cron 去调,不然以后负载均衡麻烦的很
    nothingistrue
        7
    nothingistrue  
       2023-10-09 13:18:04 +08:00
    大前提,如果你要区分同一个服务的不同节点实例,那么实例部署的时候当然要用不同的 bootstrap.yaml 。大前提,Spring Boot 和 Cloud 都不管部署(作为云服务的 Spring Cloud Foundry 另说)。

    Spring Cloud 是允许你定义 instanceId 的,代码里面根据 instanceId 做区分即可。但是如何在 bootstrap.yaml 中定义 instanceId ,这个是部署的事,要 k8s 或者脚本去负责。
    yoloMiss
        8
    yoloMiss  
    OP
       2023-10-09 19:13:40 +08:00
    @sl450282169 这个方案我想过,就是想在简单点那种,哈哈哈。最好通过简单配置就可以的。
    yoloMiss
        9
    yoloMiss  
    OP
       2023-10-09 19:15:04 +08:00
    @litchinn 三个不同的集群你说的这个 hostname 是怎么获取的呢,k8s 的知识我了解的很浅薄。
    yoloMiss
        10
    yoloMiss  
    OP
       2023-10-09 19:16:19 +08:00
    @newaccount 这个量级很小,完全为了业务做的妥协,暂时不需要考虑到负载均衡的问题。
    yoloMiss
        11
    yoloMiss  
    OP
       2023-10-09 19:19:23 +08:00
    @nothingistrue 是三个不同的集群,虽然是一套代码但是 yaml 文件也是分别独立的,最外层的 k8s 的 yaml 不允许我动,只能通过服务里的 yaml 做配置
    litchinn
        12
    litchinn  
       2023-10-10 08:54:21 +08:00
    spec.nodeName

    https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#use-pod-fields-as-values-for-environment-variables

    然后在 yaml 里就可以直接使用环境变量了,你可以试下,一个集群才适合这种,你是三个集群那这 3 个 node 的名称可能是一样的。

    3 个集群的话直接 configmap 配置个环境变量不就好了吗,不让改 k8s 里配置的 yaml ,添加一个总没问题吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1036 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:41 PVG 02:41 LAX 11:41 JFK 14:41
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86