全部产品
云市场

发布 SOFARPC 服务

更新时间:2020-05-13 11:22:23

RPC 是日常开发中最常用的中间件,通过本教程,您将学习到如何利用一个 SOFABoot Core 工程发布一个 RPC 服务。

点击此链接 下载示例工程。下载完成后,需导入 IDE 工具,具体方法请参见 SOFABoot 快速入门 > 导入 IDE 工具

配置额外参数

您需要在 application.properties 中配置以下参数:

  1. com.alipay.env
  2. com.alipay.instanceid
  3. com.antcloud.antvip.endpoint
  4. com.antcloud.mw.access
  5. com.antcloud.mw.secret

参数的具体含义见 引入 SOFA 中间件 > 添加中间件全局配置项

定义服务接口并提供实现

要发布一个 RPC 服务,我们首先要定义一个接口,示例如下:

  1. // com.alipay.APPNAME.facade.SampleService
  2. public interface SampleService {
  3. String message();
  4. }

我们对这个接口提供一个默认实现,示例如下:

  1. // com.alipay.APPNAME.service.SampleServiceImpl
  2. public class SampleServiceImpl implements SampleService {
  3. @Override
  4. public String message() {
  5. return "Hello, Service SOFABoot";
  6. }
  7. }

同时,将提供的这个实现配置为一个 Java bean。

  1. <bean id="sampleServiceBean" class="com.alipay.APPNAME.service.SampleServiceImpl"/>

发布 RPC 服务

RPC 服务提供方通过服务 <sofa:service> 来定义,主要属性有 interfaceunique-idref

服务提供方定义服务 <sofa:service>,进行服务发布;服务消费方定义服务引用 <sofa:reference>,进行服务引用。任何一个 SOFA 框架应用节点都可以同时发布服务和引用其它节点的服务。

interface

SOFA 服务以 Java 接口形式定义,最主要的属性就是 interface,该属性用于确定一个服务,属性值为:命名空间包名 + Java 接口名。

ref

ref 属性用于指定服务实现所对应的 Spring Bean,通过 Bean ID 和服务实现类进行关联。

下面的代码样例中 ref 字段配置的值引用的就是我们之前配置的 sampleServiceBean。

  1. <!-- 服务 -->
  2. <sofa:service ref="sampleServiceBean" interface="com.alipay.APPNAME.facade.SampleService">
  3. <sofa:binding.bolt/>
  4. </sofa:service>

unique-id

如果同一个接口有两个不同的实现,而这两个不同的实现都需要发布成 SOFA 的 RPC 服务,那么您可以在发布服务的时候加上一个 unique-id 属性来进行区分。

  1. <!-- 服务一 -->
  2. <sofa:service ref="sampleServiceBean1" interface="com.alipay.APPNAME.facade.SampleService" unique-id="service1">
  3. <sofa:binding.bolt/>
  4. </sofa:service>
  5. <!-- 服务二 -->
  6. <sofa:service ref="sampleServiceBean2" interface="com.alipay.APPNAME.facade.SampleService" unique-id="service2">
  7. <sofa:binding.bolt/>
  8. </sofa:service>

本地运行

  1. 在工程的根目录下执行 mvn clean install 命令,会在 target 目录下生成一个 APPNAME-service-1.0-SNAPSHOT-executable.jar 文件,这是一个可执行的 fat jar 文件。
  2. 通过以下任一方法执行 jar 文件,如果没有错误日志输出,则表示 sofaboot-rpc-server 工程启动成功。
    • 在服务器上执行 java -jar APPNAME-service-1.0-SNAPSHOT-executable.jar 命令;
    • 在本地 IDE 中直接运行 main 函数。

云端运行

详情参见 在云端运行 SOFABoot 应用

日志查看

  1. 查看 sofaboot-rpc-server 工程 RPC 发布服务启动日志 logs/rpc/common-default.log,如出现类似以下内容,说明 RPC 服务端成功启动:

    1. 2016-12-17 15:16:44,466 INFO main - sofa rpc run.mode = DEV
    2. 2016-12-17 15:16:49,479 INFO main - PID:42843 sofa rpc starting!
  2. 查看日志 logs/rpc/rpc-registry.log,内容参考如下:

    1. 2016-12-17 15:17:07,764 INFO main RPC-REGISTRY - 发布 RPC 服务:服务名[com.alipay.APPNAME.facade.SampleService:1.0@DEFAULT]
  3. 查看错误日志 logs/rpc/common-error.log,如果没有任何错误日志输出且应用启动正常,说明我们成功发布了一个 RPC 服务。

关于日志的详细信息,请参见 日志说明