全部产品

发布 SOFARPC 服务

更新时间:2020-07-23 17:25:52

RPC 是日常开发中最常用的中间件,本文主要说明如何发布一个 RPC 服务。

前置条件

配置属性参数

云端发布时,请务必在 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 中间件 > properties 配置项

发布 SOFARPC 服务

要发布一个 RPC 服务,主要步骤说明如下:

  1. app/endpoint/ 下设计接口,示例如下:

    1. // com.alipay.APPNAME.facade.SampleService
    2. public interface SampleService {
    3. String message();
    4. }
  2. 提供一个接口的实现类,示例如下:

    1. // com.alipay.APPNAME.service.SampleServiceImpl
    2. public class SampleServiceImpl implements SampleService {
    3. @Override
    4. public String message() {
    5. return "Hello, Service SOFABootRPC!";
    6. }
    7. }
  3. 在接口所在模块中,通过 resources/META-INF 下的 xml 文件,将接口实现类配置为一个 Java bean。

    1. <bean id="sampleServiceBean" class="com.alipay.APPNAME.service.SampleServiceImpl"/>
  4. 在接口所在模块中,通过 resources/META-INF 下的 xml 文件,发布 RPC 服务。根据接口实现类的个数,可以分为下述 2 种:

    • 单接口单实现,示例如下:
      1. <!-- 服务 -->
      2. <sofa:service ref="sampleServiceBean" interface="com.alipay.APPNAME.facade.SampleService">
      3. <sofa:binding.bolt/>
      4. </sofa:service>
    • 单接口多实现,示例如下:

      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>

说明

  • 服务提供方定义服务 <sofa:service>,进行服务发布;服务消费方定义服务引用 <sofa:reference>,进行服务引用。任何一个 SOFA 框架应用节点都可以同时发布服务和引用其它节点的服务。
  • RPC 服务提供方通过服务 <sofa:service> 来定义,主要属性有 interfaceunique-idref
    • interface:该属性用于确定一个服务,属性值为:命名空间包名 + Java 接口名。
    • unique-id:如果同一个接口有两个不同的实现,而这两个不同的实现都需要发布成 SOFA 的 RPC 服务,则可以在发布服务的时候加上一个 unique-id 属性来进行区分。
    • ref:该属性用于指定服务实现所对应的 Spring Bean,通过 Bean ID 和服务实现类进行关联。

本地运行

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

云端运行

SOFARPC 在本地只能通过直连方式进行体验。只有在云端发布成功后,通过 SOFAStack 控制台,才能进行服务管控和治理。具体云端发布步骤,请参考下述信息:

日志查看

  1. 查看本地工程 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 服务。

关于日志的更多详情,请参见 日志说明