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
如何完成
读者可以选择从头开始工程搭建、开发和部署,或者略过这些步骤,选择直接下载源码、打包部署来完成本篇向导。
选择直接部署的读者,请执行以下步骤:
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、 按照结果演示一节进行结果验证
FAQ
关于此文档暂时还没有FAQ