在合并部署时,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 服务。