SOFARegistry + SOFABoot + SOFARPC Demo
文章目录
- 相关文档
- 环境
- 部署注册中心
- 创建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
- 使用
ifconfig
查看网卡列表,找到自己需要绑定的网卡名称,比如eth0
. - 修改
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"
- 重新启动:
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相关推荐
- 蚂蚁金服 Service Mesh 落地实践与挑战|成都Service Mesh沙龙预告
本文整理自 GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)全球互联网架构大会,蚂蚁金服平台数据技术事业群技术专家石建伟(花名:卓与)的分享.分享基于 Ser ...
- 蚂蚁科技 Service Mesh 落地实践与挑战 | GIAC 实录
卓与 读完需要 8 分钟 速读仅需 3 分钟 本文整理自 GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)全球互联网架构大会,蚂蚁科技平台数据技术事业群技术专 ...
- 蚂蚁金服启动分布式中间件开源计划,用于快速构建金融级云原生架构
今天,蚂蚁金服正式宣布启动分布式中间件(Scalable Open Financial Architecture,以下简称 SOFA 中间件)的开源计划! SOFA 是蚂蚁金服自主研发的金融级分布式中 ...
- 开源 | 蚂蚁金服分布式中间件开源第二弹:丰富微服务架构体系
小蚂蚁说: 数据.消息.微服务是蚂蚁金服自主研发的金融级分布式中间件 SOFA (Scalable Open Financial Architecture)的三大方向. 一个多月前,蚂蚁金服开源了 S ...
- SOFARegistry注册中心的搭建(蚂蚁金服)
之前的文章中,详细的介绍了如何去搭建一个基于SOFABoot框架的项目,我们都知道,在用SpringBoot框架去开发一款分布式项目时,Spring Cloud为我们提供了一整套的针对多个服务之间的相 ...
- sofa协议服务器,SOFARPC 源码分析1 - 最简使用姿势
SOFARPC 是一个高性能.高可扩展.生产级别的 RPC 框架,由蚂蚁金服开源. 本文会提供一个 SOFARPC 最简使用示例(使用 SOFARegistry 做注册中心),之后的源码分析都会基于该 ...
- java sofa rpc_【剖析 | SOFARPC 框架】
Scalable Open Financial Architecture 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践. 本文为& ...
- SOFABoot 扩展点初体验 | SOFALab 实践系列
SOFABoot 是基于 Spring Boot 的一套研发框架. 在完全兼容 Spring Boot 的基础上,SOFABoot 还提供了启动期监控检查,上下文隔离,模块化开发,类隔离,日志空间隔离 ...
- SOFABoot框架(蚂蚁金服)
SOFABoot框架的简单搭建 先简单介绍一下SOFA Boot ,SOFA Boot 是基于 Spring Boot 的开发框架,是蚂蚁金服下的一款开源框架,用于快速.敏捷地开发 Spring 应用 ...
最新文章
- codefirst updatebase
- linux 创建临时文件目录 mktemp 命令 简介
- 让CMD窗口显示中文[JAVAC输出中文错误信息乱码的解决]
- Spring源代码学习之How is Beans.xml loaded and parsed
- php json 不转义,php json_encode中文不转义
- html 转盘游戏开发,【scratch】简单的大转盘小游戏
- List和Set中忽略的方法addAll(Collection c)和retainAll(Collection c)
- 对皮尔逊相关系数进行假设检验
- python 物理引擎_第十六章:物理引擎
- Self-paced and auto-weighted multi-view clustering 阅读笔记
- Microsoft Word 教程:如何在 Word 中插入表格?
- Cobalt Strike (cs)联动 Goby 进行内网扫描
- 苹果手机自带软件删除了怎么恢复_苹果手机数据被删除如何来恢复数据???...
- join left 大数据_left join 大数据
- 基于matlab的颜色识别与提取_机器视觉综合实训有得
- 2023年十大流媒体发展趋势展望
- fprintf()函数的使用
- jQuery 验证码输入错误后自动刷新验证码 点击验证码图片刷新验证码
- 补充:特殊句型(虚拟语气、情态动词)
- sscanf gps 解析
热门文章
- swing学习笔记:GridBagLayout
- 植物大战僵尸破产版--cocos studio
- FFmpeg 推送摄像头 rtsp 流
- POJ_1905_Expanding Rods
- cad四边形展开lisp_CAD的LISP功能函数一览表
- 正版动态素材怎么下载?教你一键快速下载gif素材
- 第二十课:电感和RL电路
- Debian 10安装Xrdp远程桌面
- python程序设计案例教程 张思民_《Python程序设计案例教程——从入门到机器学习(微课版)》.doc...
- 电影网网站优化-ETAG篇