无线开放 API

RPC服务简介

TAE提供了RPC(Remote Procedure Call)调用服务,允许Consumer程序在远程机器上调用服务提供者Provider程序提供的服务。

RPC服务API

本节对RPC服务API的使用方式进行介绍。关于详细的API说明,请 参考Java Doc

引入服务包

获取RPC服务对象

服务提供者(Provider):

    import com.alibaba.appengine.api.rpc.RpcFactory;
import com.alibaba.appengine.api.rpc.ServiceConfig;
ServiceConfig<HelloService> serviceConfig = new ServiceConfig<HelloService>();
serviceConfig.setInterfaceClass(HelloService.class);
RpcFactory.exportService(serviceConfig, new HelloServiceImpl());

服务消费者(Consumer):

    import com.alibaba.appengine.api.rpc.ReferenceConfig;
import com.alibaba.appengine.api.rpc.RpcFactory;
ReferenceConfig<HelloService> referenceConfig = new ReferenceConfig<HelloService>();
referenceConfig.setInterfaceClass(HelloService.class);
reference = RpcFactory.getReference(referenceConfig);

RPC服务使用示例

本节将向读者展示如何通过TAE SDK开发并运行一个本地的RPC服务应用。

结果演示

访问127.0.0.1:8080启动provider服务,将返回:
server is OK!
重新打开一个浏览器窗口,访问127.0.0.1:9080启动consumer服务,将返回:
RPC Invocation Result:
HELLO
======================
Input: default0, output: default0

准备工作

1、  预留大约15分钟无干扰时间
2、  安装配置TAE SDK,应用类型设置为云商店(即app.biztype=32),开发语言设置为JAVA(即app.language=JAVA)参考链接
3、  将SVN导出的本地sdk环境拷贝一份到本地机器,创建两个tomcat容器,将provider程序部署到8080端口,consumer程序部署到9080端口,详细步骤参考链接
4、  分别在两个sdk目录的conf/custom下的ace4j-private.properties文件修改配置
rpc.registry.address=multicast://224.5.6.7:1234  
rpc.port=20880  

如何完成

读者可以选择从头开始工程搭建、开发和部署,或者略过这些步骤,选择直接下载源码、打包部署来完成本篇向导。
选择从头开始的读者,也请下载应用源码与war包,rpc_provider.war下载rpc_consumer.war下载,应用源码rpc_consumer.zip下载,应用源码rpc_provider.zip下载,以便参考,并跳到下一节——工程创建。
选择直接部署的读者,请执行以下步骤:
1、  下载应用源码与war包,rpc_provider.war下载rpc_consumer.war下载,应用源码rpc_consumer.zip下载,应用源码rpc_provider.zip下载
2、  分别将rpc_provider.war文件和rpc_consumer.war文件拷贝到本地解压的容器webapps目录和拷贝后的容器webapps目录下,并分别重命名为ROOT.war;
3、  分别运行bin/startup.sh(bat)启动两个容器;
4、  容器启动成功后,可以根据结果演示一节进行验证。

开发实战

1、  创建两个maven工程,分别命名为rpc_provider和rpc_consumer
2、  在rpc_provider中创建DemoObject类作为数据模型,HelloServer类作为provider的服务提供接口,HelloServerImpl作为provider服务的接口实现类,完整示例参见:rpc_server/src/main/java/com/alibaba/tae/demo/rpc;并在RpcProvider这一servlet类中添加发布服务代码:
    ServiceConfig<HelloService> serviceConfig = new ServiceConfig<HelloService>();  
serviceConfig.setInterfaceClass(HelloService.class);  
RpcFactory.exportService(serviceConfig, new HelloServiceImpl()); 
3、  在rpc_consumer中创建同样的DemoObject类作为数据模型,HelloServer类作为provider的服务提供接口,完成示例参见:rpc_consumer/src/main/java/com/alibaba/tae/demo/rpc;并在RpcConsumer这一servlet类中添加消费服务代码:
    ReferenceConfig<HelloService> referenceConfig = new ReferenceConfig<HelloService>();  
referenceConfig.setInterfaceClass(HelloService.class);  
HelloService reference = RpcFactory.getReference(referenceConfig);
4、  初始化servlet,分别在两个工程的web.xml中添加servlet的初始化代码:
服务提供者(Provider):
    <servlet>
<servlet-name>RpcProvider</servlet-name>
<servlet-class>com.alibaba.tae.demo.rpc.RpcProvider</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RpcProvider</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
服务消费者(Consumer):
    <servlet>
<servlet-name>RpcConsumer</servlet-name>
<servlet-class>com.alibaba.tae.demo.rpc.RpcConsumer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RpcConsumer</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
5、  编译打包
使用maven的开发在工程目录下执行下面的命令,编译打包
mvn clean install
其他开发者,利用自己开发工具的打包功能,编译打包
6、  将生成的war包分别拷贝到已准备好的对应的两个本地容器的webapps目录,分别重命名为ROOT.war
7、  分别运行bin/startup.sh(bat)启动两个容器;
8、  按照结果演示一节进行结果验证