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:
将客户端和服务端
config/application.properties
中的run.mode
均配置为DEV
,即run.mode=DEV
。在工程根目录下执行
mvn clean install
命令,生成可执行文件target/APPNAME-web-1.0-SNAPSHOT-executable.jar
。在工程根目录下执行
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 服务
启动 RPC 服务端
sofaboot-rpc-server
及客户端sofaboot-rpc-client
。在浏览器中访问
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
。
有关日志的详细信息,请参考 日志说明。