我熟悉 OSGI Semantic Versioning - 技术白皮书。但是,我没有看到针对 OSGI 服务提出的任何版本控制概念。
简单情况:我提供注册为 com.services.payments.PaymentService 的服务,它执行方法 void makePayment(Integer amount, String accountNo),我将其打包为 1.0 版。然后,我用修改后的界面更新服务。我删除此方法并添加新方法:makePaymentInDifferentWay (Integer amount, String accountNo) 并将新服务打包为捆绑版本 2.0。第一个捆绑包停止后,客户端将连接第二个服务,并且崩溃在服务调用时,因为方法签名不是二进制兼容的。当您处理 java 包时,这种情况得到了完美的解决,但是我没有看到 OSGI 服务有任何开箱即用的版本控制功能。我错过了什么吗?(我知道我可以通过设置像'service.version'这样的服务属性来预先设计版本控制方案,并在客户端通过这个属性过滤提供的服务,或者只是重命名一个API包或类名,但是为什么没有提供版本控制框?也许还有其他更标准的方式解决方案?也许有一些与服务相关的概念我根本没有掌握?)