在合并部署时,Biz 之间除了可以使用 RPC 框架通信之外,还可以通过发布和引用 JVM 服务进行通信。本样例工程意在演示两个 Biz 如何使用 JVM 服务进行通信。

    在 biz-jvm-invocation-sample 内部,有三个子工程,其作用如下:

    • facade: 一个普通的 Java 模块,定义了接口 SampleJvmService:
      ```java
      package me.qlong.tech.service;
    • app-two: 一个 SOFABoot 非 Web 应用,通过注解 发布了接口为 SampleJvmService 的 JVM 服务,关键代码:
      ```java
      package me.qlong.tech.service.impl;

    import com.alipay.sofa.runtime.api.annotation.SofaService;
    import me.qlong.tech.service.SampleJvmService;
    import org.springframework.stereotype.Component;

    @SofaService

    public class AppTwoSampleService implements SampleJvmService{
    public String service() {
    return “App Two”;
    }
    }

    演示

    • cd biz-jvm-invocation-sample/app-one && mvn clean package
      在 app-one 应用根目录中执行 mvn clean package 命令,将应用打包成 Ark 包和 Biz 包,文件将输出到 biz-jvm-invocation-sample/app-one/target 目录

    • 使用 java -jar 启动 app-one 应用的 Ark 包

    • 上述报错原因是因为处理 /hello 请求时,会触发 app-one 去调用接口为 me.qlong.tech.service.SampleJvmService 的 JVM 服务,因为此时没有任何其他 Biz 发布这个服务,因此会提示找不到该 JVM 服务的报错。
    • 使用 telnet localhost 1234 进入 Jarslink2.0 指令交互界面,并执行 install -b 指令,安装启动 app-two 的 Biz 包。
    • 重新再浏览器访问 , 页面显示 “App Two”。表明此次请求触发 app-one 顺利调用到了 app-two 发布的接口为 me.qlong.tech.service.SampleJvmService 的 JVM 服务。