全部产品

引用 SOFARPC 服务

更新时间:2021-02-09 15:14:40

RPC 是日常开发中最常用的中间件,本文主要说明如何引用一个 RPC 服务。

前置条件

引入接口定义依赖

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

  • 如果是本地运行,需要在 sofaboot-rpc-server 工程目录运行 mvn clean install,将接口依赖 JAR 安装到本地仓库。

  • 若非本地运行,需要将接口依赖 JAR 上传到对应的 Maven 仓库。

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

<dependency>
    <groupId>com.alipay.APPNAME</groupId>
    <artifactId>APPNAME-facade</artifactId>
     <version>1.0-SNAPSHOT</version>
</dependency>
说明

此处客户端和服务端的应用名称均命名为 APPNAME,仅供学习使用。在实际环境中,两个应用名称不可完全一样。

引用 RPC 服务

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

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

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

将引用的 RPC 服务注入 Controller

注意

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

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

@RestController
@RequestMapping("/rpc")
public class RpcTestController{
    @Autowired
     private SampleService sampleRpcService;
     @RequestMapping("/hello")
     String rpcUniqueAndTimeout(){
          String rpcResult =this.sampleRpcService.message();
          return rpcResult;
     }
}

本地编译

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 容器启动成功:

      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 服务发布和引用均成功。

    Hello,ServiceSOFABoot

云端运行

SOFARPC 在本地只能通过直连方式进行体验。只有在云端发布成功后,通过 SOFAStack 控制台,才能进行服务管控和治理。具体云端发布步骤,请参考下述信息:

  • 对于应用的整体发布流程,建议参考 技术栈使用指南 中的 技术栈与应用发布流程

  • 应用的详细发布步骤,建议根据发布方式,参考下述文档:

    • 经典应用服务之 快速入门

    • 容器应用服务之 快速入门

      说明

      云端发布时,请务必在 application.properties 中配置以下属性:

      • run.mode=NORMAL

      • com.alipay.env=shared

      • com.alipay.instanceid=

      • com.antcloud.antvip.endpoint=

      • com.antcloud.mw.access=

      • com.antcloud.mw.secret=

      运行模式和运行环境的值为默认固定值。上述参数的具体含义请参见 引入 SOFA 中间件 > properties 配置项

日志查看

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

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

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

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