文章目录

  • 相关文档
  • 环境
  • 部署注册中心
  • 创建SOFABoot项目
    • 接口定义
    • provider服务
    • consumer服务

相关文档

SOFA Stack
sofa-registry
sofa-rpc

环境

  • JDK 1.8
  • Maven 3
  • sofa-boot 3.6.0
  • sofa-registry 5.4.2
  • sofa-rpc 5.7.7

部署注册中心

选择在Linux上单机快速部署,其他部署方式参考文档:SOFA Registry服务端部署。

mkdir -p /opt/sofa-registry
cd /opt/sofa-registry
wget https://github.com/sofastack/sofa-registry/releases/download/v5.4.2/registry-integration-fix.tgz
tar -zvxf registry-integration-fix.tgz
cd bin
./startup.sh

可访问三个角色提供的健康监测 API,或查看日志 logs/registry-startup.log,以检查是否启动成功:

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

这里特别注意查看一下logs/registry-integration-std.out日志中末尾的这几行:

...
[2021-02-25 17:52:40,981][INFO][main][SessionServerBootstrap] - Session server Environment: DataCenter DefaultDataCenter,Region DEFAULT_ZONE,ProcessId 0aca3f241614246760981100119050
[2021-02-25 17:52:40,983][INFO][main][SessionServerBootstrap] - Raft Client started! Leader:192.168.11.11:9614
[2021-02-25 17:52:41,071][INFO][main][SessionServerBootstrap] - Register MetaServer Session Node success!get data node list {DefaultDataCenter={192.168.11.11=DataNode{ip=192.168.11.11}}}
[2021-02-25 17:52:41,078][INFO][main][SessionServerBootstrap] - Get all dataCenter from meta Server success!
[2021-02-25 17:52:41,091][INFO][main][SessionServerBootstrap] - MetaServer connected meta server! Port:9610
[2021-02-25 17:52:41,095][INFO][main][SessionServerBootstrap] - Session Scheduler started!
[2021-02-25 17:52:41,286][INFO][main][SessionServerBootstrap] - Open http server port 9603 success!
[2021-02-25 17:52:41,303][INFO][main][SessionServerBootstrap] - Session server started! port:9600
[2021-02-25 17:52:41,447][INFO][main][SessionServerBootstrap] - Initialized Session Server...
[2021-02-25 17:52:41,458][INFO][main][SessionServerInitializer] - Started SessionServer
[2021-02-25 17:52:41,508][INFO][main][RegistryApplication] - localhost:9603 health check success.

其中有几个IP:

[2021-02-25 17:52:40,983][INFO][main][SessionServerBootstrap] - Raft Client started! Leader:192.168.11.11:9614
[2021-02-25 17:52:41,071][INFO][main][SessionServerBootstrap] - Register MetaServer Session Node success!get data node list {DefaultDataCenter={192.168.11.11=DataNode{ip=192.168.11.11}}}

一定要注意这几个IP是否是自己想要绑定的IP,如果不是,或者几个IP不一致,可能是有多个网卡导致的。如果不做任何处理,可能会导致sofa-rpc服务注册失败、调用失败等等,解决方法可参考:sofastack/sofa-registry/issues/35

  1. 使用ifconfig查看网卡列表,找到自己需要绑定的网卡名称,比如eth0.
  2. 修改bin/startup.sh,在JVM参数中添加-Dnetwork_interface_binding=eth0:
    # set user.home
    JAVA_OPTS="$JAVA_OPTS -Duser.home=${BASE_DIR}"# 添加下面的参数可绑定网卡
    # set network
    JAVA_OPTS="$JAVA_OPTS -Dnetwork_interface_binding=eth0"# springboot conf
    SPRINGBOOT_OPTS="${SPRINGBOOT_OPTS} --logging.config=${BASE_DIR}/conf/logback-spring.xml"
    
  3. 重新启动:
    sh shutdown.sh
    sh startup.sh
    

创建SOFABoot项目

新建父项目sofa-registry-demo,创建三个子项目:

  • sofa-api:API定义,用于生产者发布服务和消费者订阅服务。
  • sofa-provider:提供服务。
  • sofa-consumer:消费服务并提供对外访问入口。

设置sofa-registry-demo的父项目为sofaboot-dependencies,这样所有子项目可非常方便饮用sofa依赖:

<parent><groupId>com.alipay.sofa</groupId><artifactId>sofaboot-dependencies</artifactId><version>3.6.0</version>
</parent>

sofa-registry-demo的pom文件中管理sofa-api版本:

    <dependencyManagement><dependencies><dependency><groupId>com.szkingdom.sofa</groupId><artifactId>sofa-api</artifactId><version>1.0.0-SNAPSHOT</version></dependency></dependencies></dependencyManagement>

接口定义

sofa-api子项目中定义接口:

public interface CalculatorService {/*** add* @param a a* @param b b* @return a+b*/int add(int a, int b);/*** sub* @param a a* @param b b* @return a - b*/int sub(int a, int b);/*** multiply* @param a a* @param b b* @return a*b*/int multiply(int a, int b);/*** divide* @param a a* @param b b* @return a/b*/int divide(int a, int b);}

provider服务

sofa-provider子项目中引入依赖:

<!-- rpc starter用于rpc服务暴露 -->
<dependency><groupId>com.alipay.sofa</groupId><artifactId>rpc-sofa-boot-starter</artifactId>
</dependency><!-- sofa api用于服务实现 -->
<dependency><groupId>com.szkingdom.sofa</groupId><artifactId>sofa-api</artifactId>
</dependency><!-- registry client用于注册中心服务注册 -->
<dependency><groupId>com.alipay.sofa</groupId><artifactId>registry-client-all</artifactId>
</dependency><!-- logback classic用于日志打印 -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency>

实现sofa-api中定义的接口:

@SofaService(interfaceType = CalculatorService.class, bindings = {@SofaServiceBinding(bindingType = "bolt")})
@Service
public class CalculatorServiceImpl implements CalculatorService {@Overridepublic int add(int a, int b) {return a + b;}@Overridepublic int sub(int a, int b) {return a - b;}@Overridepublic int multiply(int a, int b) {return a * b;}@Overridepublic int divide(int a, int b) {return a / b;}
}

注意需要使用@Service@SofaService双重注解,即需注册成spring bean,否则sofa-rpc无法扫描到服务,也不会注册到注册中心。

bindings属性可以指定服务暴露的协议,可以指定一种协议,也可以指定多种协议,这里选择阿里的bolt协议,更多协议请参考:SOFARPC

创建启动类:

@SpringBootApplication
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}

新增application.properties配置文件:

spring.application.name=SOFA-PROVIDER
com.alipay.sofa.rpc.registry.address=sofa://192.168.11.11:9603

运行启动类启动项目,可访问sofa-registry api 查看注册的服务列表:

curl localhost:9622/digest/datum/count
# publisher数量变为1
CacheDigest [Datum] size of datum in DefaultDataCenter is 1,[Publisher] size of publisher in DefaultDataCenter is 1curl localhost:9603/digest/getDataInfoIdList
# 可以查看所有发布的服务
["github.clyoudu.sofa.api.CalculatorService:1.0@DEFAULT#@#DEFAULT_INSTANCE_ID#@#SOFA"]

如果访问registry接口未找到注册的服务,可以到sofa-provider启动的机器上的~/logs/registry/common-err.log查看error日志,如果发现是访问的registry ip地址不对,比如并不是期望绑定的IP,可以放回上文看看是否是存在多个网卡但未设置network_interface_binding导致的。

consumer服务

sofa-consumer子项目中引入依赖:

<!-- rpc starter用于rpc服务订阅 -->
<dependency><groupId>com.alipay.sofa</groupId><artifactId>rpc-sofa-boot-starter</artifactId>
</dependency><!-- sofa api用于服务引用 -->
<dependency><groupId>com.szkingdom.sofa</groupId><artifactId>sofa-api</artifactId>
</dependency><!-- registry client用于注册中心服务注册 -->
<dependency><groupId>com.alipay.sofa</groupId><artifactId>registry-client-all</artifactId>
</dependency><!-- 用于暴露http接口用于外部调试 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

使用sofa-api中定义的接口并暴露http接口:

@RestController
@RequestMapping("test")
public class TestController {@SofaReference(interfaceType = CalculatorService.class, binding = @SofaReferenceBinding(bindingType = "bolt"))private CalculatorService calculatorService;@GetMapping("cal")public Integer result(@RequestParam Integer a, @RequestParam Integer b, @RequestParam Integer c,@RequestParam Integer d, @RequestParam Integer e) {// (a+b-c)*d/ereturn calculatorService.divide(calculatorService.multiply(calculatorService.sub(calculatorService.add(a, b), c), d), e);}}

@SofaReference注解中的binding属性必须在provider的bindings列表中,否则会导致服务访问失败。

创建启动类:

@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}

新增application.properties配置文件:

spring.application.name=SOFA-CONSUMER
com.alipay.sofa.rpc.registry.address=sofa://10.202.63.36:9603

启动启动类,访问接口:http://localhost:8080/test/cal?a=1&b=2&c=1&d=10&e=5,结果返回4,调用成功。

SOFARegistry + SOFABoot + SOFARPC Demo相关推荐

  1. 蚂蚁金服 Service Mesh 落地实践与挑战|成都Service Mesh沙龙预告

    本文整理自 GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)全球互联网架构大会,蚂蚁金服平台数据技术事业群技术专家石建伟(花名:卓与)的分享.分享基于 Ser ...

  2. 蚂蚁科技 Service Mesh 落地实践与挑战 | GIAC 实录

    卓与 读完需要 8 分钟 速读仅需 3 分钟 本文整理自 GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)全球互联网架构大会,蚂蚁科技平台数据技术事业群技术专 ...

  3. 蚂蚁金服启动分布式中间件开源计划,用于快速构建金融级云原生架构

    今天,蚂蚁金服正式宣布启动分布式中间件(Scalable Open Financial Architecture,以下简称 SOFA 中间件)的开源计划! SOFA 是蚂蚁金服自主研发的金融级分布式中 ...

  4. 开源 | 蚂蚁金服分布式中间件开源第二弹:丰富微服务架构体系

    小蚂蚁说: 数据.消息.微服务是蚂蚁金服自主研发的金融级分布式中间件 SOFA (Scalable Open Financial Architecture)的三大方向. 一个多月前,蚂蚁金服开源了 S ...

  5. SOFARegistry注册中心的搭建(蚂蚁金服)

    之前的文章中,详细的介绍了如何去搭建一个基于SOFABoot框架的项目,我们都知道,在用SpringBoot框架去开发一款分布式项目时,Spring Cloud为我们提供了一整套的针对多个服务之间的相 ...

  6. sofa协议服务器,SOFARPC 源码分析1 - 最简使用姿势

    SOFARPC 是一个高性能.高可扩展.生产级别的 RPC 框架,由蚂蚁金服开源. 本文会提供一个 SOFARPC 最简使用示例(使用 SOFARegistry 做注册中心),之后的源码分析都会基于该 ...

  7. java sofa rpc_【剖析 | SOFARPC 框架】

    Scalable Open Financial Architecture 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践. 本文为& ...

  8. SOFABoot 扩展点初体验 | SOFALab 实践系列

    SOFABoot 是基于 Spring Boot 的一套研发框架. 在完全兼容 Spring Boot 的基础上,SOFABoot 还提供了启动期监控检查,上下文隔离,模块化开发,类隔离,日志空间隔离 ...

  9. SOFABoot框架(蚂蚁金服)

    SOFABoot框架的简单搭建 先简单介绍一下SOFA Boot ,SOFA Boot 是基于 Spring Boot 的开发框架,是蚂蚁金服下的一款开源框架,用于快速.敏捷地开发 Spring 应用 ...

最新文章

  1. codefirst updatebase
  2. linux 创建临时文件目录 mktemp 命令 简介
  3. 让CMD窗口显示中文[JAVAC输出中文错误信息乱码的解决]
  4. Spring源代码学习之How is Beans.xml loaded and parsed
  5. php json 不转义,php json_encode中文不转义
  6. html 转盘游戏开发,【scratch】简单的大转盘小游戏
  7. List和Set中忽略的方法addAll(Collection c)和retainAll(Collection c)
  8. 对皮尔逊相关系数进行假设检验
  9. python 物理引擎_第十六章:物理引擎
  10. Self-paced and auto-weighted multi-view clustering 阅读笔记
  11. Microsoft Word 教程:如何在 Word 中插入表格?
  12. Cobalt Strike (cs)联动 Goby 进行内网扫描
  13. 苹果手机自带软件删除了怎么恢复_苹果手机数据被删除如何来恢复数据???...
  14. join left 大数据_left join 大数据
  15. 基于matlab的颜色识别与提取_机器视觉综合实训有得
  16. 2023年十大流媒体发展趋势展望
  17. fprintf()函数的使用
  18. jQuery 验证码输入错误后自动刷新验证码 点击验证码图片刷新验证码
  19. 补充:特殊句型(虚拟语气、情态动词)
  20. sscanf gps 解析

热门文章

  1. swing学习笔记:GridBagLayout
  2. 植物大战僵尸破产版--cocos studio
  3. FFmpeg 推送摄像头 rtsp 流
  4. POJ_1905_Expanding Rods
  5. cad四边形展开lisp_CAD的LISP功能函数一览表
  6. 正版动态素材怎么下载?教你一键快速下载gif素材
  7. 第二十课:电感和RL电路
  8. Debian 10安装Xrdp远程桌面
  9. python程序设计案例教程 张思民_《Python程序设计案例教程——从入门到机器学习(微课版)》.doc...
  10. 电影网网站优化-ETAG篇