SOFAStack技术栈的Demo演示有哪些亮点?

2026-05-22 10:032阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3271个文字,预计阅读时间需要14分钟。

SOFAStack技术栈的Demo演示有哪些亮点?

SOFAStack技术栈Demo1、概述SOFAStack(+S+calable+O+pen+F+inancial+A+rchitecture+Stack)是蚂蚁金服自主研发的金融级云原生架构,包含构建金融级云原生架构所需的所有组件,旨在金融场景中实现极致性能和稳定性。

SOFAStack 技术栈Demo 1、概述

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。

官网: www.sofastack.tech

码云源码: gitee.com/sofastack/

源码: github.com/sofastack


项目列表

  • SOFABoot 是基于 Spring Boot 的一套研发框架,完全兼容 Spring Boot 的基础上,还提供了启动期监控检查,上下文隔离,模块化开发,类隔离,日志空间隔离等能力。
  • SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。
  • SOFAMesh 是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案。
  • SOFATracer 是基于 OpenTracing 规范的分布式链路跟踪系统。
  • SOFALookout 是一款解决系统的度量和监控问题的轻量级中间件服务。
  • SOFABolt 是基于 Netty 实现的网络通信框架。
  • SOFAArk 是一款基于 Java 实现的轻量级类隔离容器。
  • SOFAJarslink 是基于 SOFAArk 的动态模块和合并部署的解决方案。
  • SOFAActs 是一款白盒测试框架,旨在为企业提供高效、精细化的接口自动化测试。
  • SOFAJraft 是生产级的 Java 版本的 Raft 协议实现。
  • SOFARegistry 是一款生产级、高时效、高可用的服务注册中心。
  • SOFADashboard 是一站式的 SOFA 框架管控端。
  • Mosn 是 Golang 开发的 Service Mesh 数据平面代理,旨在提供分布式,模块化,可观察,智能化的代理能力。
  • Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

这里主要对SOFABoot、SOFARegistry、SOFARPC进行使用

测试Demo地址

gitlab.zkj.test/enterprise-wechat/dev/sofaboot.git

2、SOFABoot 1、介绍

SOFABoot 是蚂蚁金服开源的基于 SpringBoot 的研发框架,提供了诸如 Readiness Check、类隔离、日志空间隔离等能力,用于快速、敏捷地开发 Spring 应用程序,特别适合构建微服务系统。

SpringBoot 基于 Spring 的按条件配置(Conditional Configuration),结合 starter 依赖机制提供了快捷、方便开发 Spring 项目的体验,获得了极大的成功;SOFABoot 同样在这两个能力上基于 SpringBoot 扩展出适应于金融级应用开发框架。作为脱胎于蚂蚁金服内部对于 SpringBoot 的实践,SOFABoot 补充了 SpringBoot 在大规模金融级生产场景下一些不足的地方,例如 Readiness 检查、类隔离和日志空间隔离等等能力。在增强了 SpringBoot 的同时,SOFABoot 还提供了让用户可以在 SpringBoot 中非常方便地使用 SOFAStack 中间件的能力。

你可以在发布历史中查看所有的发布报告,SOFABoot 版本和 Spring Boot 版本对应关系如下:

SOFABoot 版本 Spring Boot 版本 2.3.x 1.4.2.RELEASE 2.4.x 1.4.2.RELEASE 2.5.x 1.5.16.RELEASE 3.0.x 2.0.3.RELEASE 3.1.x 2.1.0.RELEASE 3.2.x 2.1.0.RELEASE 3.3.0~3.3.1 2.1.11.RELEASE 3.3.2 及以后 2.1.13.RELEASE

现有项目SpringBoot 2.1.0.RELEASE,引入SOFABoot 3.2.1版本

技术栈版本

依赖版本 原因 SpringBoot 2.1.0.RELEASE 现有springcloud项目的版本 SOFABoot 3.2.1 SpringBoot对应版本,与顺德框架统一版本 SOFARegistry 5.2.0 SOFARPC 3.2.1 SOFABoot 3.2.1中托管 2、搭建步骤 1、父工程POM依赖

<!-- 统一管理jar包版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <registry.client.version>5.2.0</registry.client.version> <rpc.version>5.5.2</rpc.version> </properties> <!-- 子模块全部继承,子模块不需要写--> <dependencies> <!-- SpringBoot 监控暴露--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- sofa健康检查--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>healthcheck-sofa-boot-starter</artifactId> </dependency> </dependencies> <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version --> <dependencyManagement> <dependencies> <!--spring-cloud-dependencies引入为pom 文件 --> <!-- <scope>import</scope>解决单继承问题,类似parent标签--> <!-- sofaboot依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>sofaboot-dependencies</artifactId> <version>3.1.4</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SOFARegistry依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> <version>${registry.client.version}</version> </dependency> <!--SOFARPC 依赖Sofaboot中托管--> </dependencies> </dependencyManagement>

<!--SOFARPC 依赖Sofaboot中托管 在Sofaboot3.1.4中需要单独加Sofaboot的依赖 3.2.1不需要--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>rpc-sofa-boot-starter</artifactId> <version>${rpc.version}</version> <exclusions> <exclusion> <groupId>org.jboss.resteasy</groupId> <artifactId>jaxrs-api</artifactId> </exclusion> </exclusions> </dependency> 2、SOFABootDemo的POM依赖

<!-- SpringBootWeb依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringBoot 监控暴露--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- sofa健康检查--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>healthcheck-sofa-boot-starter</artifactId> </dependency> 3、yml配置

#必须要有name,否则报错 spring: application: name: SOFABoot Demo #端口号 server: port: 9090 #日志 logging: path: ./logs level: com: alipay: test: INFO # 暴露监控端点 management: endpoints: web: exposure: include: "*" 4、写测试controller

@RestController public class HelloController { @GetMapping("/hello") public String Hello() { return "ok"; } } 5、测试

浏览器访问地址:localhost:9090/hello,返回ok

可以通过在浏览器中输入 localhost:9090/actuator/readiness 查看应用 Readiness Check 的状况

{ "status":"UP", "details":{ "SOFABootReadinessHealthCheckInfo":{ "status":"UP" }, "diskSpace":{ "status":"UP", "details":{ "total":296626417664, "free":293247467520, "threshold":10485760 } } } } 3、SOFARegistry 1、介绍

SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。SOFARegistry 最早源自于淘宝的 ConfigServer,十年来,随着蚂蚁金服的业务发展,注册中心架构已经演进至第五代。目前 SOFARegistry 不仅全面服务于蚂蚁金服的自有业务,还随着蚂蚁金融科技服务众多合作伙伴,同时也兼容开源生态。SOFARegistry 采用 AP 架构,支持秒级时效性推送,同时采用分层架构支持无限水平扩展。

2、搭建 1. 下载源码或者安装包

git clone github.com/sofastack/sofa-registry.git cd sofa-registry mvn clean package -DskipTests cp server/distribution/integration/target/registry-integration.tgz <somewhere> cd <somewhere> && mkdir registry-integration tar -zxvf registry-integration.tgz -C registry-integration cd registry-integration

下载安装包方式

您可以从 release 页面 下载最新的 registry-integration-$version.tar.gz 包。

mkdir registry-integration tar -zxvf registry-integration-$version.tar.gz -C registry-integration cd registry-integration 2. 启动 registry-integration

Linux/Unix/Mac

启动命令:sh bin/startup.sh

Windows

双击 bin 目录下的 startup.bat 运行文件。

SOFAStack技术栈的Demo演示有哪些亮点?

3.确认运行状态

可访问三个角色提供的健康监测 API,或查看日志 logs/registry-startup.log:

# 查看meta角色的健康检测接口: $ curl localhost:9615/health/check {"success":true,"message":"... raftStatus:Leader"} # 查看data角色的健康检测接口: $ curl localhost:9622/health/check {"success":true,"message":"... status:WORKING"} # 查看session角色的健康检测接口: $ curl localhost:9603/health/check {"success":true,"message":"..."} 4、SOFARPC 1、介绍

SOFARPC 是蚂蚁金服开源的一款基于 Java 实现的 RPC 服务框架,为应用之间提供远程服务调用能力,具有高可伸缩性,高容错性,目前蚂蚁金服所有的业务的相互间的 RPC 调用都是采用 SOFARPC。SOFARPC 为用户提供了负载均衡,流量转发,链路追踪,链路数据透传,故障剔除等功能。

SOFARPC 还支持不同的协议,目前包括 bolt,RESTful,dubbo,H2C 协议进行通信。其中 bolt 是蚂蚁金融服务集团开放的基于 Netty 开发的网络通信框架。

  1. 当一个 SOFARPC 的应用启动的时候,如果发现当前应用需要发布 RPC 服务的话,那么 SOFARPC 会将这些服务注册到服务注册中心上。如图中 Service 指向 Registry。
  2. 当引用这个服务的 SOFARPC 应用启动时,会从服务注册中心订阅到相应服务的元数据信息。服务注册中心收到订阅请求后,会将发布方的元数据列表实时推送给服务引用方。如图中 Registry 指向 Reference。
  3. 当服务引用方拿到地址以后,就可以从中选取地址发起调用了。如图中 Reference 指向 Service。
2、服务端搭建 1、POM依赖

<!-- SpringBootWeb依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SOFARPC 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>rpc-sofa-boot-starter</artifactId> </dependency> <!--SOFARegistry 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> </dependency> 2、yml

#应用名称 spring: application: name: sofa-server #端口号 server: port: 8081 #日志位置 logging: path: ./logs #暴露监控 management: endpoints: web: exposure: include: "*" #注册中心地址 com: alipay: sofa: rpc: registry: address: sofa://10.99.67.16:9603 3、Config

/* 阿里更新bug github.com/sofastack/sofa-boot/issues/566 升级sofa-boot到3.2.1版本后,SOFARegistry无法使用,只能使用zk做注册中心。 检查代码发现是SofaRpcAutoConfiguration这个类在做注入注册中心处理器实现时添加了 @ConditionalOnMissingBean 注解, 导致只注入了local、mesh和zk的处理器,其它注册中心的处理器没有注入。 不知为何要做这个配置? 添加此配置添加SofaRegistry的使用 */ @Component public class SofaRegistry { @Bean @ConditionalOnMissingBean public SofaRegistryConfigurator sofaRegistryConfigurator() { return new SofaRegistryConfigurator(); } } 4、测试代码

package com.feng.service; public interface HelloSyncService { String saySync(String string); }

实现

//发布成一个 SOFARPC 服务: HelloSyncService接口,bolt协议 @SofaService(interfaceType = HelloSyncService.class, bindings = { @SofaServiceBinding(bindingType = "bolt")}) @Component public class HelloSyncServiceImpl implements HelloSyncService { @Override public String saySync(String string) { System.out.println("1111111111111111111111111111111111"); return string; } }

@RestController public class HelloController { @GetMapping("/hello") public String Hello() { return "ok"; } } 3、客户端调用 1、POM依赖

<!-- SpringBootWeb依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SOFARPC 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>rpc-sofa-boot-starter</artifactId> </dependency> <!--SOFARegistry 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> </dependency> 2、yml

#应用名称 spring: application: name: sofa-client #端口号 server: port: 8082 #日志位置 logging: path: ./logs #暴露监控 management: endpoints: web: exposure: include: "*" #注册中心地址 com: alipay: sofa: rpc: registry: address: sofa://10.99.67.16:9603 3、Config

/* 阿里更新bug github.com/sofastack/sofa-boot/issues/566 升级sofa-boot到3.2.1版本后,SOFARegistry无法使用,只能使用zk做注册中心。 检查代码发现是SofaRpcAutoConfiguration这个类在做注入注册中心处理器实现时添加了 @ConditionalOnMissingBean 注解, 导致只注入了local、mesh和zk的处理器,其它注册中心的处理器没有注入。 不知为何要做这个配置? 添加此配置添加SofaRegistry的使用 */ @Component public class SofaRegistry { @Bean @ConditionalOnMissingBean public SofaRegistryConfigurator sofaRegistryConfigurator() { return new SofaRegistryConfigurator(); } } 3、测试代码

  • HelloSyncService必须和server里面的包名相同

package com.feng.service; public interface HelloSyncService { String saySync(String string); }

HelloSyncClientService类

@Component public class HelloSyncClientService { //引用 SOFARPC 服务,bolt协议 @SofaReference(interfaceType = HelloSyncService.class, binding = @SofaReferenceBinding(bindingType = "bolt")) private HelloSyncService helloSyncService; public String saySync(String str) { return helloSyncService.saySync(str); } }

HelloController

@RestController public class HelloController { @Autowired private HelloSyncClientService helloSyncClientService; @GetMapping(value = "/hello") public String saySync(@RequestParam("str") String str) { return helloSyncClientService.saySync(str); } @GetMapping(value = "/hello1") public String saySync1() { return helloSyncClientService.saySync("11111"); } @GetMapping(value = "/hello12") public String saySync() { return "11111"; } } 4、测试

浏览器访问localhost:8082/hello?str=111 ,返回111

成功

本文共计3271个文字,预计阅读时间需要14分钟。

SOFAStack技术栈的Demo演示有哪些亮点?

SOFAStack技术栈Demo1、概述SOFAStack(+S+calable+O+pen+F+inancial+A+rchitecture+Stack)是蚂蚁金服自主研发的金融级云原生架构,包含构建金融级云原生架构所需的所有组件,旨在金融场景中实现极致性能和稳定性。

SOFAStack 技术栈Demo 1、概述

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。

官网: www.sofastack.tech

码云源码: gitee.com/sofastack/

源码: github.com/sofastack


项目列表

  • SOFABoot 是基于 Spring Boot 的一套研发框架,完全兼容 Spring Boot 的基础上,还提供了启动期监控检查,上下文隔离,模块化开发,类隔离,日志空间隔离等能力。
  • SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。
  • SOFAMesh 是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案。
  • SOFATracer 是基于 OpenTracing 规范的分布式链路跟踪系统。
  • SOFALookout 是一款解决系统的度量和监控问题的轻量级中间件服务。
  • SOFABolt 是基于 Netty 实现的网络通信框架。
  • SOFAArk 是一款基于 Java 实现的轻量级类隔离容器。
  • SOFAJarslink 是基于 SOFAArk 的动态模块和合并部署的解决方案。
  • SOFAActs 是一款白盒测试框架,旨在为企业提供高效、精细化的接口自动化测试。
  • SOFAJraft 是生产级的 Java 版本的 Raft 协议实现。
  • SOFARegistry 是一款生产级、高时效、高可用的服务注册中心。
  • SOFADashboard 是一站式的 SOFA 框架管控端。
  • Mosn 是 Golang 开发的 Service Mesh 数据平面代理,旨在提供分布式,模块化,可观察,智能化的代理能力。
  • Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

这里主要对SOFABoot、SOFARegistry、SOFARPC进行使用

测试Demo地址

gitlab.zkj.test/enterprise-wechat/dev/sofaboot.git

2、SOFABoot 1、介绍

SOFABoot 是蚂蚁金服开源的基于 SpringBoot 的研发框架,提供了诸如 Readiness Check、类隔离、日志空间隔离等能力,用于快速、敏捷地开发 Spring 应用程序,特别适合构建微服务系统。

SpringBoot 基于 Spring 的按条件配置(Conditional Configuration),结合 starter 依赖机制提供了快捷、方便开发 Spring 项目的体验,获得了极大的成功;SOFABoot 同样在这两个能力上基于 SpringBoot 扩展出适应于金融级应用开发框架。作为脱胎于蚂蚁金服内部对于 SpringBoot 的实践,SOFABoot 补充了 SpringBoot 在大规模金融级生产场景下一些不足的地方,例如 Readiness 检查、类隔离和日志空间隔离等等能力。在增强了 SpringBoot 的同时,SOFABoot 还提供了让用户可以在 SpringBoot 中非常方便地使用 SOFAStack 中间件的能力。

你可以在发布历史中查看所有的发布报告,SOFABoot 版本和 Spring Boot 版本对应关系如下:

SOFABoot 版本 Spring Boot 版本 2.3.x 1.4.2.RELEASE 2.4.x 1.4.2.RELEASE 2.5.x 1.5.16.RELEASE 3.0.x 2.0.3.RELEASE 3.1.x 2.1.0.RELEASE 3.2.x 2.1.0.RELEASE 3.3.0~3.3.1 2.1.11.RELEASE 3.3.2 及以后 2.1.13.RELEASE

现有项目SpringBoot 2.1.0.RELEASE,引入SOFABoot 3.2.1版本

技术栈版本

依赖版本 原因 SpringBoot 2.1.0.RELEASE 现有springcloud项目的版本 SOFABoot 3.2.1 SpringBoot对应版本,与顺德框架统一版本 SOFARegistry 5.2.0 SOFARPC 3.2.1 SOFABoot 3.2.1中托管 2、搭建步骤 1、父工程POM依赖

<!-- 统一管理jar包版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <registry.client.version>5.2.0</registry.client.version> <rpc.version>5.5.2</rpc.version> </properties> <!-- 子模块全部继承,子模块不需要写--> <dependencies> <!-- SpringBoot 监控暴露--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- sofa健康检查--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>healthcheck-sofa-boot-starter</artifactId> </dependency> </dependencies> <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version --> <dependencyManagement> <dependencies> <!--spring-cloud-dependencies引入为pom 文件 --> <!-- <scope>import</scope>解决单继承问题,类似parent标签--> <!-- sofaboot依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>sofaboot-dependencies</artifactId> <version>3.1.4</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SOFARegistry依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> <version>${registry.client.version}</version> </dependency> <!--SOFARPC 依赖Sofaboot中托管--> </dependencies> </dependencyManagement>

<!--SOFARPC 依赖Sofaboot中托管 在Sofaboot3.1.4中需要单独加Sofaboot的依赖 3.2.1不需要--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>rpc-sofa-boot-starter</artifactId> <version>${rpc.version}</version> <exclusions> <exclusion> <groupId>org.jboss.resteasy</groupId> <artifactId>jaxrs-api</artifactId> </exclusion> </exclusions> </dependency> 2、SOFABootDemo的POM依赖

<!-- SpringBootWeb依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringBoot 监控暴露--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- sofa健康检查--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>healthcheck-sofa-boot-starter</artifactId> </dependency> 3、yml配置

#必须要有name,否则报错 spring: application: name: SOFABoot Demo #端口号 server: port: 9090 #日志 logging: path: ./logs level: com: alipay: test: INFO # 暴露监控端点 management: endpoints: web: exposure: include: "*" 4、写测试controller

@RestController public class HelloController { @GetMapping("/hello") public String Hello() { return "ok"; } } 5、测试

浏览器访问地址:localhost:9090/hello,返回ok

可以通过在浏览器中输入 localhost:9090/actuator/readiness 查看应用 Readiness Check 的状况

{ "status":"UP", "details":{ "SOFABootReadinessHealthCheckInfo":{ "status":"UP" }, "diskSpace":{ "status":"UP", "details":{ "total":296626417664, "free":293247467520, "threshold":10485760 } } } } 3、SOFARegistry 1、介绍

SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。SOFARegistry 最早源自于淘宝的 ConfigServer,十年来,随着蚂蚁金服的业务发展,注册中心架构已经演进至第五代。目前 SOFARegistry 不仅全面服务于蚂蚁金服的自有业务,还随着蚂蚁金融科技服务众多合作伙伴,同时也兼容开源生态。SOFARegistry 采用 AP 架构,支持秒级时效性推送,同时采用分层架构支持无限水平扩展。

2、搭建 1. 下载源码或者安装包

git clone github.com/sofastack/sofa-registry.git cd sofa-registry mvn clean package -DskipTests cp server/distribution/integration/target/registry-integration.tgz <somewhere> cd <somewhere> && mkdir registry-integration tar -zxvf registry-integration.tgz -C registry-integration cd registry-integration

下载安装包方式

您可以从 release 页面 下载最新的 registry-integration-$version.tar.gz 包。

mkdir registry-integration tar -zxvf registry-integration-$version.tar.gz -C registry-integration cd registry-integration 2. 启动 registry-integration

Linux/Unix/Mac

启动命令:sh bin/startup.sh

Windows

双击 bin 目录下的 startup.bat 运行文件。

SOFAStack技术栈的Demo演示有哪些亮点?

3.确认运行状态

可访问三个角色提供的健康监测 API,或查看日志 logs/registry-startup.log:

# 查看meta角色的健康检测接口: $ curl localhost:9615/health/check {"success":true,"message":"... raftStatus:Leader"} # 查看data角色的健康检测接口: $ curl localhost:9622/health/check {"success":true,"message":"... status:WORKING"} # 查看session角色的健康检测接口: $ curl localhost:9603/health/check {"success":true,"message":"..."} 4、SOFARPC 1、介绍

SOFARPC 是蚂蚁金服开源的一款基于 Java 实现的 RPC 服务框架,为应用之间提供远程服务调用能力,具有高可伸缩性,高容错性,目前蚂蚁金服所有的业务的相互间的 RPC 调用都是采用 SOFARPC。SOFARPC 为用户提供了负载均衡,流量转发,链路追踪,链路数据透传,故障剔除等功能。

SOFARPC 还支持不同的协议,目前包括 bolt,RESTful,dubbo,H2C 协议进行通信。其中 bolt 是蚂蚁金融服务集团开放的基于 Netty 开发的网络通信框架。

  1. 当一个 SOFARPC 的应用启动的时候,如果发现当前应用需要发布 RPC 服务的话,那么 SOFARPC 会将这些服务注册到服务注册中心上。如图中 Service 指向 Registry。
  2. 当引用这个服务的 SOFARPC 应用启动时,会从服务注册中心订阅到相应服务的元数据信息。服务注册中心收到订阅请求后,会将发布方的元数据列表实时推送给服务引用方。如图中 Registry 指向 Reference。
  3. 当服务引用方拿到地址以后,就可以从中选取地址发起调用了。如图中 Reference 指向 Service。
2、服务端搭建 1、POM依赖

<!-- SpringBootWeb依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SOFARPC 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>rpc-sofa-boot-starter</artifactId> </dependency> <!--SOFARegistry 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> </dependency> 2、yml

#应用名称 spring: application: name: sofa-server #端口号 server: port: 8081 #日志位置 logging: path: ./logs #暴露监控 management: endpoints: web: exposure: include: "*" #注册中心地址 com: alipay: sofa: rpc: registry: address: sofa://10.99.67.16:9603 3、Config

/* 阿里更新bug github.com/sofastack/sofa-boot/issues/566 升级sofa-boot到3.2.1版本后,SOFARegistry无法使用,只能使用zk做注册中心。 检查代码发现是SofaRpcAutoConfiguration这个类在做注入注册中心处理器实现时添加了 @ConditionalOnMissingBean 注解, 导致只注入了local、mesh和zk的处理器,其它注册中心的处理器没有注入。 不知为何要做这个配置? 添加此配置添加SofaRegistry的使用 */ @Component public class SofaRegistry { @Bean @ConditionalOnMissingBean public SofaRegistryConfigurator sofaRegistryConfigurator() { return new SofaRegistryConfigurator(); } } 4、测试代码

package com.feng.service; public interface HelloSyncService { String saySync(String string); }

实现

//发布成一个 SOFARPC 服务: HelloSyncService接口,bolt协议 @SofaService(interfaceType = HelloSyncService.class, bindings = { @SofaServiceBinding(bindingType = "bolt")}) @Component public class HelloSyncServiceImpl implements HelloSyncService { @Override public String saySync(String string) { System.out.println("1111111111111111111111111111111111"); return string; } }

@RestController public class HelloController { @GetMapping("/hello") public String Hello() { return "ok"; } } 3、客户端调用 1、POM依赖

<!-- SpringBootWeb依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SOFARPC 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>rpc-sofa-boot-starter</artifactId> </dependency> <!--SOFARegistry 依赖--> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> </dependency> 2、yml

#应用名称 spring: application: name: sofa-client #端口号 server: port: 8082 #日志位置 logging: path: ./logs #暴露监控 management: endpoints: web: exposure: include: "*" #注册中心地址 com: alipay: sofa: rpc: registry: address: sofa://10.99.67.16:9603 3、Config

/* 阿里更新bug github.com/sofastack/sofa-boot/issues/566 升级sofa-boot到3.2.1版本后,SOFARegistry无法使用,只能使用zk做注册中心。 检查代码发现是SofaRpcAutoConfiguration这个类在做注入注册中心处理器实现时添加了 @ConditionalOnMissingBean 注解, 导致只注入了local、mesh和zk的处理器,其它注册中心的处理器没有注入。 不知为何要做这个配置? 添加此配置添加SofaRegistry的使用 */ @Component public class SofaRegistry { @Bean @ConditionalOnMissingBean public SofaRegistryConfigurator sofaRegistryConfigurator() { return new SofaRegistryConfigurator(); } } 3、测试代码

  • HelloSyncService必须和server里面的包名相同

package com.feng.service; public interface HelloSyncService { String saySync(String string); }

HelloSyncClientService类

@Component public class HelloSyncClientService { //引用 SOFARPC 服务,bolt协议 @SofaReference(interfaceType = HelloSyncService.class, binding = @SofaReferenceBinding(bindingType = "bolt")) private HelloSyncService helloSyncService; public String saySync(String str) { return helloSyncService.saySync(str); } }

HelloController

@RestController public class HelloController { @Autowired private HelloSyncClientService helloSyncClientService; @GetMapping(value = "/hello") public String saySync(@RequestParam("str") String str) { return helloSyncClientService.saySync(str); } @GetMapping(value = "/hello1") public String saySync1() { return helloSyncClientService.saySync("11111"); } @GetMapping(value = "/hello12") public String saySync() { return "11111"; } } 4、测试

浏览器访问localhost:8082/hello?str=111 ,返回111

成功