引用 SOFARPC 服务

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 中间件

日志查看

查看 sofaboot-rpc-client 工程引用 RPC 服务启动日志 logs/rpc/rpc-registry.log,出现类似如下日志时,说明 RPC 服务引用成功。

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

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

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