Spring如何在运行时动态增加对其他系统的调用?

目前有两个独立的业务系统A和B,都基于Spring Boot

A系统做完某些业务后,会调用B系统的方法。 例如B系统为消息推送系统,提供了一个消息推送的接口。A系统在完成签到业务后调用B推送系统推送消息

//系统A的某项业务示例代码
public void doSomeThing(){
    //系统A 某项业务结束,调用B系统的方法
    A.doSomeThing();
    
    B.invokeMethod();
}

现在问题是,如果有新的业务需要推送消息那么我们现在的做法:

  1. 停掉A系统
  2. 在A系统里面的相关业务再加上一句 B.invokeMethod()
  3. 然后重新将A打包再上线

如果有新的需求,就周而复始这样的操作

目前我个人考虑,能不能利用配置文件,或者数据库表的配置,配置哪个类的哪个方法,执行完了调用一下B.invokeMethod()。当有新需求,修改配置文件或者表,利用类似Spring Bus等消息的方式,将改变下发到业务A,业务A再重新加载配置。就类似于Spring Cloud的配置中心。但这种做法,目前没找到解决办法

目前有没有什么方案,或技术能够在运行时动态增加调用方法,来解决这类问题?

阅读 1.7k
2 个回答

你这个情况可以考虑做一个service粒度的aop切面,在切面内部可以拿到当前方法的元数据信息,然后把 是否需要调用b这部分的逻辑封装成一个方法(比如读取数据库配置的方法名匹配等..) 这样子 当你动态的修改了配置后 程序逻辑就能够按你的配置去决定要不要调用B.invokeMethod()了。 当然这种方案需要考虑到 B.invokeMethod() 是否需要细粒度到参数?

或者可以在抽象一层可以用groovy这种动态编译执行的语言嵌入一层。动态修改这部分 重新加载即可。不用重新发布项目。

没看懂你的的问题, 你说的究竟是同一类消息增加新的消息接收者? 还是新增一类消息发给已有的消息接收者?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题