全部产品
云市场

引用 SOFARPC 服务

更新时间:2020-05-13 11:22:23

本文将引导您快速学习如何引用一个 RPC 服务。

点击此处 下载示例工程。下载完成后,需导入 IDE 工具,具体方法请参见 SOFABoot 快速开始 > 导入 IDE 工具

配置额外参数

您需要在 application.properties 中配置以下参数:

  1. com.alipay.env
  2. com.alipay.instanceid
  3. com.antcloud.antvip.endpoint

参数的具体含义参见 引入 SOFA 中间件 > 中间件全局配置项

引入接口定义依赖

要引用一个 RPC 服务,我们需要知道 RPC 服务的提供方所发布的接口是什么(如果发布的服务有 unique-id,我们还需要知道 unique-id),这就要求服务提供方将自己所发布的接口所在的 JAR 及依赖信息传到 Maven 仓库,以便服务引用方能够引用服务提供方所发布的 RPC 服务。

  • 如果是本地运行,需要在 sofaboot-rpc-server 工程目录运行 mvn clean install,将接口依赖 JAR 安装到本地仓库;
  • 若非本地运行,需要将接口依赖 JAR 上传到对应的 Maven 仓库。

获得 RPC 服务的发布接口后,在 sofaboot-rpc-client 工程下的主 pom 中添加所引用的 RPC 服务的接口依赖信息,示例如下:

  1. <dependency>
  2. <groupId>com.alipay.APPNAME</groupId>
  3. <artifactId>APPNAME-facade</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. </dependency>
说明:此处客户端和服务端的应用名称均命名为 APPNAME,仅供学习使用。在实际环境中,两个应用名称不可完全一样。

引用 RPC 服务

在配置文件 META-INF/APPNAME/APPNAME-web.xml 中,根据接口配置引用一个 RPC 服务:

  1. <sofa:reference id="sampleRpcService"
  2. interface="com.alipay.APPNAME.facade.SampleService">
  3. <sofa:binding.bolt/>
  4. </sofa:reference>

此处的 RPC 引用也是一个 bean,其 bean id 为 sampleRpcService

将引用的 RPC 服务注入 Controller

注意:这一步是为了演示方便,实现用户通过浏览器或者其他方式访问一个 rest 接口,然后触发调用引用的服务,再调用到服务端,实际开发中,并不需要注入 Controller 这一步,请使用方注意。

本教程中,我们将这个 RPC 服务注入到了 com.alipay.APPNAME.web.springrest.RpcTestController 中,示例如下:

  1. @RestController
  2. @RequestMapping("/rpc")
  3. public class RpcTestController {
  4. @Autowired
  5. private SampleService sampleRpcService;
  6. @RequestMapping("/hello")
  7. String rpcUniqueAndTimeout() {
  8. String rpcResult = this.sampleRpcService.message();
  9. return rpcResult;
  10. }
  11. }

本地编译

sofaboot-rpc-client 是一个 SOFABoot Web 工程。依次执行以下命令以进行本地编译并启动 RPC client:

  1. 将客户端和服务端 config/application.properties 中的 run.mode 均配置为 DEV,即 run.mode=DEV
  2. 在工程根目录下执行:mvn clean install,生成可执行文件 target/APPNAME-web-1.0-SNAPSHOT-executable.jar
  3. 在工程根目录下执行:java -jar ./target/APPNAME-web-1.0-SNAPSHOT-executable.jar
    • 如果控制台输出如下信息,则表示 WEB 容器启动成功:
      1. 16:11:13.625 INFO org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer - Tomcat started on port(s): 8080 (http)
    • 如果输出错误信息,请在解决问题后重试以上步骤。

测试 RPC 服务

  1. 启动 RPC 服务端 sofaboot-rpc-server 及客户端 sofaboot-rpc-client。
  2. 在浏览器中访问 http://localhost:8080/rpc/hello 来测试引用的 RPC 服务。当浏览器输出如下信息时,表示 RPC 服务发布和引用均成功。
    1. Hello, Service SOFABoot

云端运行

详情参见 在云端运行 SOFABoot 应用

日志查看

查看 sofaboot-rpc-client 工程引用 RPC 服务启动日志:查看日志目录 logs/rpc/rpc-registry.log,内容参考如下:

  1. 2016-12-17 15:45:50,340 INFO main RPC-REGISTRY - 订阅 RPC 服务:服务名[com.alipay.APPNAME.facade.SampleService:1.0@DEFAULT]

以上日志说明 RPC 服务引用成功,如果发现引用 RPC 服务失败,请重点关注日志目录 logs 下的所有 common-error.log

有关日志的详细信息,请参考 日志说明