全部产品
云市场

开始使用 SOFARPC

更新时间:2020-07-01 17:49:20

本文将引导您如何通过示例工程快速上手 SOFARPC,实现服务发布、引用,以及应用部署和服务查询。

示例工程

点击此处下载 SOFARPC 示例工程。下载完成后,请完成下述操作:

  • 通过 IDEA 或 Eclipse 将 rpc-demo 中的 2 个工程 myserver-appmyclient-app 分别打开。
  • 请务必参考 版本说明,将工程根目录下 pom.xml 中的版本号,修改为最新版本号。

示例工程服务验证

  • 首先启动 myserver-app web 模块的 SOFABootWebSpringApplication 发布服务;
  • 然后启动 myclient-app web 模块的 SOFABootWebSpringApplication 引用服务;

引用成功后,myclient-app 控制台将输出:

  1. Response from myserver-app: Hello SOFARpc! times = xx

您也可通过日志来查看服务引用结果。在 Web 子模块路径 src/main/resources/config/application.properties 中,可设置日志路径。默认在 logs/myweb-app/common-default.log 中查看服务引用结果。

其它本地编译方式,可参见 本地编译运行

示例工程说明

示例工程关键信息

  • groupId: 工程组织的唯一标识,示例工程为 com.alipay.mytestsofa
  • artifactId:工程的构件标识符,示例工程为 myserver-appmyclient-app
  • version:版本号,默认为 1.0-SNAPSHOT
  • package:应用包名,默认等同于 groupId,工程示例为 com.alipay.mytestsofa

示例工程配置

SOFARPC 的服务发布与引用配置均需要写到 Spring 的 XML 文件中。以 Web 工程为例,Spring XML 文件的默认路径示例如下:

endpoint 子模块为:

  • src/main/resources/META-INF/myserver-app/myserver-app-endpoint.xml
  • src/main/resources/META-INF/myclient-app/myclient-app-endpoint.xml

示例工程原理

  • 在 2 个工程的 endpoint 模块中相同位置,提供相同的服务接口和实现,并通过 XML 配置发现服务。2 个工程通过相同接口实现关联。一个客户端,一个服务端,如果是本机,通过 XML 中配置 testurl 发现服务;如果是服务器上部署测试,走 DSR 底座发现服务。
  • 启动 myserver-app web 模块的 SOFABootWebSpringApplication,发布服务。
  • 启动 myclient-app web 模块的 SOFABootWebSpringApplication,引用服务。

服务发布

服务发布包含四个步骤,以 endpoint 子模块为例:

  1. 设计服务接口类 SampleService.java,代码如下:
    接口路径为:com.alipay.samples.rpc.SampleService

    1. /**
    2. * 服务接口类
    3. */
    4. public interface SampleService {
    5. public String hello();
    6. }
  2. 编写服务实现类 SampleServiceImpl.java, 代码如下:
    接口实现路径为:com.alipay.samples.rpc.impl.SampleServiceImpl

    1. public class SampleServiceImpl implements SampleService {
    2. private int count = 0;
    3. @Override
    4. public String hello() {
    5. return "Hello SOFARpc! times = " + count++;
    6. }
    7. }
  3. 通过以下任一方式在 Spring XML 中配置服务发布的相关参数:

    • 新增 XML,配置相关参数。
    • 直接在已有的 XML 中新增以下配置。
      使用 SOFABoot 原型 Web 工程时,可以在src/main/resources/META-INF/myserver-app/myserver-app-endpoint.xml 中新增下述配置:
      1. <!-- 声明服务的实现对象,以下类全名和接口全名,请根据自己的包名进行指定 -->
      2. <bean id="sampleService" class="com.alipay.samples.rpc.impl.SampleServiceImpl"/>
      3. <!-- RPC 服务发布 -->
      4. <sofa:service ref="sampleService" interface="com.alipay.samples.rpc.SampleService">
      5. <sofa:binding.bolt/>
      6. </sofa:service>
  4. 运行 web 子模块中的 SOFABootWebSpringApplication,框架会自动进行服务的发布。为了避免端口冲突,需要在该类中指定端口,示例如下:

    1. //*************** 注意 ******************//
    2. //1. 本地同时启动 myserver-app 和 myclient-app 时,由于 tomcat 端口冲突问题,需要修改 myserver-app 的 端口号为 8083
    3. //2. 将 myserver-app 和 myclient-app 发布到云上环境时,由于默认健康检查端口是 8080,所以需要注释掉这行代码
    4. System.setProperty("server.port", "8083");

    重要:如需将 myserver-app 发布至云上环境,必须注释掉上述代码。

服务引用

通过在 XML 文件中配置参数和引用对象注入,即可实现服务引用。

配置参数

您可以通过以下任一方式配置参数:

  • 新增 XML,配置相关参数。
  • 直接在已有的 XML 中新增以下配置。
    使用 SOFABoot 原型 Web 工程时,可以在src/main/resources/META-INF/myserver-app/myclient-app-endpoint.xml 中新增配置:
    1. <!--引用 SOFARPC 服务-->
    2. <!--以下接口名请根据服务提供方的接口全名来指定-->
    3. <sofa:reference id="sampleServiceRef" interface="com.alipay.samples.rpc.SampleService">
    4. <sofa:binding.bolt>
    5. <sofa:global-attrs address-wait-time="5000"/>
    6. <!--使用直连的方式访问本地启动的 myserver-app, 发布到线上时需要删除此配置项-->
    7. <sofa:route target-url="127.0.0.1:12201"/>
    8. </sofa:binding.bolt>
    9. </sofa:reference>

    说明target-url="127.0.0.1:12201":注意端口号 12201 需要和 myserver-app web 模块 src/main/resources/config/application.properties 中配置 rpc.tr.port=12201 进行对应。

引用对象注入

为了方便直观使用,我们将引用服务,放在 RPC 服务引用类,即 Web 子模块的 com.alipay.mytestsofa.SOFABootWebSpringApplication 中,示例如下:

  1. @ImportResource({"classpath*:META-INF/myclient-app/*.xml"})
  2. @org.springframework.boot.autoconfigure.SpringBootApplication
  3. public class SOFABootWebSpringApplication {
  4. private static final Logger logger = LoggerFactory.getLogger(SOFABootWebSpringApplication.class);
  5. public static void main(String[] args) {
  6. //*************** 注意 ******************//
  7. //1. 本地同时启动 myserver-app 和 myclient-app 时,由于 tomcat 端口冲突问题,需要修改 myclient-app 的 端口号为 8084
  8. //2. 将 myserver-app 和 myclient-app 发布到云上环境时,由于默认健康检查端口是 8080,所以需要注释掉该行代码
  9. System.setProperty("server.port", "8084");
  10. //3. 由于本地启动没有注册中心,所以使用本地直连的方式访问本地启动的 myserver-app,发布到线上的时候需要注释掉该行代码
  11. System.setProperty("run.mode", "TEST");
  12. //********************************//
  13. SpringApplication springApplication = new SpringApplication(SOFABootWebSpringApplication.class);
  14. ApplicationContext applicationContext = springApplication.run(args);
  15. if (logger.isInfoEnabled()) {
  16. printMsg("SofaRpc Application (myclient-app) started on 8084 port.");
  17. }
  18. //2. 调用 SOFARpc 服务
  19. final SampleService sampleService = (SampleService) applicationContext.getBean("sampleServiceRef");
  20. new Thread(new Runnable() {
  21. @Override
  22. public void run() {
  23. while (true) {
  24. try {
  25. String response = sampleService.hello();
  26. printMsg("Response from myserver-app: " + response);
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. } finally {
  30. try {
  31. TimeUnit.SECONDS.sleep(3);
  32. } catch (InterruptedException e) {
  33. //ignore
  34. }
  35. }
  36. }
  37. }
  38. }).start();
  39. }
  40. private static void printMsg(String msg) {
  41. System.out.println(msg);
  42. if (logger.isInfoEnabled()) {
  43. logger.info(msg);
  44. }
  45. }
  46. }

本地测试中,如果客户端和服务端同时在本地启动,需要修改客户端的端口,防止端口冲突,示例如下:

  • 在 myserver-app web 模块 src/main/resources/config/application.properties 文件中配置 rpc.tr.port=12201
  • 在 myclient-app web 模块 src/main/resources/config/application.properties 文件中配置 rpc.tr.port=12202

说明rpc.tr.port 是 TR 端口号,默认为 12200。

自定义工程

如您想要参考上述 示例工程 自定义创建 SOFABoot 工程,发布引用 SOFARPC 服务,您可以通过以下步骤完成。

  1. 创建并配置好 2 个 SOFABoot Web 工程,分别作为客户端和服务端。创建 SOFABoot 工程的详细步骤,可参见 SOFABoot 快速入门

    说明:请使用 SOFABoot 3.x.x 版本。最新版本信息参见 SOFABoot 版本说明

  2. 在全局配置文件 application.properties 中,添加以下配置信息:
    • com.alipay.instanceid:应用实例在工作空间中的唯一标识。您可以前往 脚手架 > Step 2 > 实例标识 获取。
    • com.antcloud.antvip.endpoint:应用通过 AntVIP 指来获取各个组件的服务端地址。每个区域一个地址。您可以前往 脚手架 > Step 2 > AntVIP 获取。脚手架
    • com.antcloud.mw.accesscom.antcloud.mw.secret:访问中间件的身份验证密钥,可前往 RAM 控制台 获取。详见 创建 AccessKey
  3. 在 2 个本地 SOFABoot 工程 web 模块 pom.xml 中引入 SOFARPC 的 Maven 依赖。
    1. <dependency>
    2. <groupId>com.alipay.sofa</groupId>
    3. <artifactId>rpc-enterprise-sofa-boot-starter</artifactId>
    4. </dependency>
  4. 在上述创建的工程 endpoint 模块相同位置添加服务接口及实现,参考上文中的 示例工程配置
  5. 在 2 个工程 endpoint 模块的 Spring XML 文件中,分别添加服务发布和引用配置信息。
  6. 启动服务提供方 web 模块的 SOFABootWebSpringApplication,发布服务。
  7. 启动服务引用方 web 模块的 SOFABootWebSpringApplication,引用服务。

部署应用

本地应用开发测试完成后,您需要将应用部署至金融分布式架构 SOFAStack 平台。发布部署的详细步骤,可参见 经典应用服务的快速入门

服务查询

应用在云上环境发布成功后,即可在微服务控制台查询到该服务。微服务控制台提供已注册服务的查询功能,可以查询已经注册的服务的提供者与消费者的具体信息。

登录微服务平台后,点击 微服务 > 服务管控

查询实例下所有的服务

通过关键字可以模糊查询已经发布或订阅的服务。例如,通过 ElasticService 关键字可以搜索到服务类名或包名中含 ElasticService 的所有服务。无条件查询可以匹配该实例下所有的服务,也可以输入 IP 进行精确查询,如输入 11.165.199.35,可以查询这个 IP 节点发布或订阅的所有服务。

服务查询

有关 RPC 服务管控的更多信息,请参见 服务管控 > 查看及管理 RPC 服务