本文档将演示了如何在 SOFABoot 环境下应用 SOFARPC 进行服务的发布和引用。

您可以直接在工程下找到本文档的示例代码。注意,示例代码中需要本地安装 zookeeper 环境,如果没有安装.需要将application.properties中的com.alipay.sofa.rpc.registry.address 配置注释掉.走本地文件注册中心的方式

创建工程

  • 环境准备:SOFABoot 需要 JDK7 或者 JDK8 ,需要采用 Apache Maven 2.2.5 或者以上的版本来编译。
  • 工程构建:SOFABoot 构建在 Spring Boot 之上。因此可以使用 Spring Boot 的工程生成工具 来生成一个标准的Spring Boot 工程。
  • 引入 SOFABoot 环境:生成的 Spring Boot 标准工程直接使用的 Spring Boot 的 parent 依赖,改为 SOFABoot 提供的 parent 依赖,该parent 提供并管控了多种 SOFABoot 提供的 starter。
  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>${spring.boot.version}</version>
  5. <relativePath/>
  6. </parent>

替换为:

  1. <parent>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>sofaboot-dependencies</artifactId>
  4. <version>${sofa.boot.version}</version>
  5. </parent>

这里的 ${sofa.boot.version} 指定具体的 SOFABoot 版本,参考发布历史

  • 配置 application.properties :application.properties 是 SOFABoot 工程中的配置文件。这里需要配置一个必不可少的配置项,即应用名。
  1. spring.application.name=AppName
  • 引入 RPC Starter:
  1. <dependency>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>rpc-sofa-boot-starter</artifactId>
  4. </dependency>

定义服务接口与实现

  1. public interface HelloSyncService {
  2. String saySync(String string);
  3. }
  1. public class HelloSyncServiceImpl implements HelloSyncService {
  2. @Override
  3. public String saySync(String string) {
  4. return string;
  5. }
  6. }

服务端发布服务

在 xml 文件中编写如下配置。Spring 上下文在刷新时,SOFABoot 就将该服务实现注册到了服务器上,以 bolt 协议与客户端进行通信地址,并将地址等元数据发布到了注册中心(这里默认使用的本地文件作为注册中心)。

  1. <bean id="helloSyncServiceImpl" class="com.alipay.sofa.rpc.samples.invoke.HelloSyncServiceImpl"/>
  2. <sofa:service ref="helloSyncServiceImpl" interface="com.alipay.sofa.rpc.samples.invoke.HelloSyncService">
  3. <sofa:binding.bolt/>
  4. </sofa:service>

客户端引用服务

在 xml 文件中编写如下配置。Spring 上下文刷新时,SOFABoot 会生成一个RPC的代理 bean,即 personReferenceBolt 。这样就可以直接在代码中使用该 bean 进行远程调用了。

  1. <sofa:reference id="helloSyncServiceReference" interface="com.alipay.sofa.rpc.samples.invoke.HelloSyncService">
  2. <sofa:binding.bolt/>
  3. </sofa:reference>

运行

在 SpringBoot 的启动类中编码如下。其中利用 ImportResource 将上述的xml文件加载。

  1. @ImportResource({ "classpath*:rpc-sofa-boot-starter-samples.xml" })
  2. @org.springframework.boot.autoconfigure.SpringBootApplication
  3. public class SofaBootRpcSamplesApplication {
  4. public static void main(String[] args) {
  5. SpringApplication springApplication = new SpringApplication(SofaBootRpcSamplesApplication.class);
  6. ApplicationContext applicationContext = springApplication.run(args);
  7. HelloSyncService helloSyncServiceReference = (HelloSyncService) applicationContext
  8. .getBean("helloSyncServiceReference");
  9. System.out.println(helloSyncServiceReference.saySync("sync"));
  10. }
  11. }

打印结果如下:

  1. sync

以上就完成了一次服务发布和服务引用。