sofa rpc入门
SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。SOFARPC 致力于简化应用之间的 RPC 调用,为应用提供方便透明、稳定高效的点对点远程服务调用方案。为了用户和开发者方便的进行功能扩展,SOFARPC 提供了丰富的模型抽象和可扩展接口,包括过滤器、路由、负载均衡等等。同时围绕 SOFARPC 框架及其周边组件提供丰富的微服务治理方案。
功能特性
- 透明化、高性能的远程服务调用
- 支持多种服务路由及负载均衡策略
- 支持多种注册中心的集成
- 支持多种协议,包括 Bolt、Rest、Dubbo 等
- 支持同步、单向、回调、泛化等多种调用方式
- 支持集群容错、服务预热、自动故障隔离
- 强大的扩展功能,可以按需扩展各个功能组件
项目中通过mvn依赖或gradle依赖引入sofa rpc包,使用mvn依赖:
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-rpc-all</artifactId>
<version>最新版本号</version>
</dependency>
gradle依赖方式:
compile group: 'com.alipay.sofa', name: 'sofa-rpc-all', version: '最新版本号'
服务发布
服务发布过程涉及到三个类 RegistryConfig ,ServerConfig ,ProviderConfig 。
1、RegistryConfig注册中心配置类
RegistryConfig registryConfig = new RegistryConfig().setProtocol("zookeeper").setAddress("127.0.0.1:2181")
RegistryConfig 表示注册中心。如上声明了服务注册中心的地址和端口是127.0.0.1:2181,协议是 Zookeeper 。
2、ServerConfig服务运行容器配置类
ServerConfig serverConfig = new ServerConfig().setPort(8803).setProtocol("bolt");
ServerConfig 表示服务运行容器。如上声明了一个使用8803端口和 bolt 协议的 server 。
3、ProviderConfig服务发布配置类
ProviderConfig<HelloWorldService> providerConfig = new ProviderConfig<HelloWorldService>().setInterfaceId(HelloWorldService.class.getName()) .setRef(new HelloWorldServiceImpl()) .setServer(serverConfig) .setRegistry(registryConfig);
providerConfig.export();
ProviderConfig 表示服务发布,用来设置接口名称、接口实现类引用以及指定服务端配置;如上声明了服务的接口,实现和该服务运行的 server 。 最终通过 export 方法将这个服务发布出去了。
服务引用
服务引用涉及到两个类, RegistryConfig 和 ConsumerConfig 。
1、ConsumerConfig服务引用配置类
ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>().setInterfaceId(HelloService.class.getName()) .setRegistry(registryConfig);
HelloService helloService = consumerConfig.refer();
ConsumerConfig 表示服务引用,如上声明了所引用服务的接口和服务注册中心。 最终通过 refer 方法将这个服务引用,获取到该服务的远程调用的代理。
SOFARPC服务引用支持如下特性:
(1)同一服务注册多个注册中心,构建多个RegistryConfig设置给 ConsumerConfig
List<RegistryConfig> registryConfigs = new ArrayList<RegistryConfig>();
registryConfigs.add(registryA);
registryConfigs.add(registryB);
consumerConfig.setRegistry(registryConfigs);
(2)提供MethodConfig进行方法级别参数设置,API方式使用相应的对象set法即可为其设置参数
MethodConfig methodConfigA = new MethodConfig();
MethodConfig methodConfigB = new MethodConfig();
List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>();
methodConfigs.add(methodConfigA);
methodConfigs.add(methodConfigB);
consumerConfig.setMethods(methodConfigs); //客户端设置
下面我们写一个简单的例子来说明一下
编写服务端实现
第一步:创建接口
/*** Quick Start demo interface*/
public interface HelloService {String sayHello(String string);
}
第二步:创建接口实现
/*** Quick Start demo implement*/
public class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String string) {System.out.println("Server receive: " + string);return "hello " + string + " !";}
}
第三步:编写服务端代码
/*** Quick Start Server*/
public class QuickStartServer {public static void main(String[] args) {ServerConfig serverConfig = new ServerConfig().setProtocol("bolt") // 设置一个协议,默认bolt.setPort(12200) // 设置一个端口,默认12200.setDaemon(false); // 非守护线程ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>().setInterfaceId(HelloService.class.getName()) // 指定接口.setRef(new HelloServiceImpl()) // 指定实现.setServer(serverConfig); // 指定服务端providerConfig.export(); // 发布服务}
}
编写客户端实现
第一步:拿到服务端接口
一般服务端会通过jar的形式将接口类提供给客户端。而在本例中,由于服务端和客户端在一个工程所以跳过。
第二步:编程客户端代码
/*** Quick Start client*/
public class QuickStartClient {public static void main(String[] args) {ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>().setInterfaceId(HelloService.class.getName()) // 指定接口.setProtocol("bolt") // 指定协议.setDirectUrl("bolt://127.0.0.1:12200"); // 指定直连地址// 生成代理类HelloService helloService = consumerConfig.refer();while (true) {System.out.println(helloService.sayHello("world"));try {Thread.sleep(2000);} catch (Exception e) {}}}
}
运行结果
分别启动服务端和客户端,观察运行效果。
服务端将打印:
Server receive: world
客户端将打印:
hello world !
参考:
https://blog.csdn.net/qq924862077/article/details/81915213
https://www.jianshu.com/p/47816d0f1317
sofa rpc入门相关推荐
- SOFA RPC 详细介绍
简介 SOFA 作为蚂蚁金服自主研发的分布式的系统中间件,包含金融级云原生的架构所需要的各种组件,其中包括微服务的研发框架.RPC调用框架.服务的注册中心.分布式定时任务.限流/熔断机制.动态配置 ...
- 为什么SOFA RPC调用30s还不超时?
简介:为什么SOFA RPC调用30s还不超时? 1. 背景 最近帮客户处理了一个诡异的RPC调用问题,想跟大家分享一下.关于SOFA RPC,请参考官网[1]. 2. 问题现象 客户使用 REST ...
- SOFA Boot 整合SOFA RPC 、SOFA Registry
参考资料 https://www.wenjiangs.com/doc/dc7xvpxh https://www.sofastack.tech/projects/sofa-rpc/getting-sta ...
- spider RPC入门指南
请访问https://git.oschina.net/zhjh256/io-spider获取最新更新. 本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件 ...
- RPC入门总结(一)RPC定义和原理
转载:深入浅出 RPC - 浅出篇 转载:RPC框架与Dubbo完整使用 转载:深入浅出 RPC - 深入篇 转载:远程调用服务(RPC)和消息队列(Message Queue)对比及其适用/不适用场 ...
- Soul网关发布里程碑的2.3.0版本,新增支持GRPC,Tars,Sofa协议
距离上一次发布长达半年之久,在这半年的时间里,我与我的社区小伙伴们,做了太多太多的事情.完成了将近200 多次PR,发表了将近300 篇文章的源码解析,新增贡献者 120 多位,晋升了 7位commi ...
- SOFA 源码分析 — 链路数据透传
前言 SOFA-RPC 支持数据链路透传功能,官方解释: 链路数据透传功能支持应用向调用上下文中存放数据,达到整个链路上的应用都可以操作该数据. 使用方式如下,可分别向链路的 request 和 re ...
- SOFA 源码分析 — 连接管理器
前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...
- C/C++:Windows编程—Windows RPC 传递自定义数据类型、自定义数据类型数组、指针数组
前言 该篇博文不是讲Windows rpc入门的.是笔者在实际使用Windows RPC时 所遇到的问题,以及解决方法. 笔者有这样的需求,需要从RPC Server获取大量数据,而且该数据是动态分配 ...
最新文章
- asp用于取代什么技术_ASP是不是已经被淘汰了?
- Scala闭包特性的一个测试
- phalcon: 缓存片段,文件缓存,memcache缓存
- 一个追求高效的学习者手机里装有哪些APP?(转)
- 黄学长模拟day1 球的序列
- Delphi INI文件保存与读取
- J2EE--Mybatis基础知识题
- opencv 物体形状匹配
- 输出结果为16的python表达式_第一周作业(rayco)
- 冰点下载器手机版apk_冰点下载器安卓版下载
- H5常用代码:页面框架
- 数据处理与分析|涵盖七大分析方法
- 微型计算机键盘ins代表,微型计算机技术69124.ppt
- 基于朴素贝叶斯算法的新闻分类
- java新手初次面试要注意的事项
- hlg2146【多维背包】
- ANSYS Workbench仿真(ADD):应力奇异点VS应力集中
- P2P“点融网”凭什么拿得2.07亿美元融资?
- pix2pixHD:High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs
- 逻辑 - 联言命题,选言命题
热门文章
- 为云而生,云原生数据库TDSQL-C技术突破与演进
- IronMCC 多媒体展厅中控系统
- 计算机系统招标范围,信息化系统招标文件(2015.09.16最终稿1).doc
- linux中文件权限 组,linux中文件权限格式与chmod命令以及用户和用户组的管理
- 网络爬虫--requests、post、解密、Cookie、Session、IP代理
- Qt识别文件类型的正确姿势
- ThinkPadE540重装系统
- 苹果CEO乔布斯在斯坦福大学的演讲稿[中英]
- 浅谈图像处理与深度学习
- C++删除目录,包括该目录下所有子目录和文件