轻量化的分布式服务框架 Hasor-RSF 盘点

介绍:
  一个轻量化的分布式服务框架,相信这类框架已经不是什么新鲜事物,可用的替代方案有很多这里就不多说了,说一下RSF解决的问题把。

1.分布式
  这个是基本功能之一,消费者会自动轮询本地可用IP地址表以减少对单一服务提供者的访问压力。

2.接口泛化
  服务提供者和服务消费者,之间不需要明确的接口定义。说白了就是提供和消费两个程序各自使用各自的接口,无需搞出一个接口jar做统一约束。RSF会自动根据方法签名来匹配调用。

3.自定义序列化
  支持自定义序列化。内置Hessian、Java两种序列化方案,默认配置 Hessian 版本为4.0。如需更换其它版本直接引入相关Jar包即可,内置的Hessian包名已经经过处理不会产生冲突。

4.同步 or 异步
  基于接口包装的服务调用是同步处理的,因为异步的话无法及时获取返回值。基于RsfClient接口调用远端服务的话,可以同步也可以异步。异步的话有CallBack也有Future。

5.热装载/热卸载
  RSF上的服务都是动态的,服务可以随时发布随时卸载。

6.多版本
  定位一个RSF服务采用Group,Name,Version三个属性。一台服务器可以同时发布同一个服务的不同版本。

7.服务拦截器
  虽说用处可能不是很大,但是对于某些想管理所有远程调用的需求来说还是必要的。比方说:服务的使用授权、还有调用统计以及本地服务调用优先等。


接下来需要解决的问题:

1.服务网关
  面对外网的RSF调用,需要一个RSF服务网关来代为转发。

2.服务监控
  可以全面实现服务的调用流程监控。等等,甚至可以操纵服务上下限。设置服务限流等策略。


目前RSF存在的问题:


1.RSF服务在调用远端服务时如果出现远端拒绝,客户端会进行重试ChooseOther响应信息(尚未支持这一功能)

2.不支持多语言客户端。这个是体力活,如果去支持的话RSF是可以做到的。因为RSF传输协议是自有的传输协议,多语言要解决的只有序列化的问题。

例子:

Server端:

RsfBootstrap bootstrap = new RsfBootstrap();
bootstrap.doBinder(new RsfStart() {
    public void onBind(RsfBinder rsfBinder) throws Throwable {
       rsfBinder.rsfService(EchoService.class, new EchoServiceImpl()).register();
    }
}).socketBind(8001);
RsfContext rsfContext = bootstrap.sync();

客户端:

//1.使用 RSF 引导程序创建 RSF。
RsfBootstrap bootstrap = new RsfBootstrap();
bootstrap.doBinder(new RsfStart() {
    public void onBind(RsfBinder rsfBinder) throws Throwable {
        String hostAddress = InetAddress.getLocalHost().getHostAddress();
        rsfBinder.bindAddress(hostAddress, 8001);//分布式的远程服务提供者:1
        rsfBinder.bindAddress(hostAddress, 8002);//分布式的远程服务提供者:2
        rsfBinder.rsfService(EchoService.class).register();
    }
});
RsfContext rsfContext = bootstrap.sync();
//
//2.获取远程服务的包装类
EchoService myService = rsfContext.getRsfClient().wrapper("RSF", EchoService.class.getName(), "1.0.0", EchoService.class);
//3.发起调用
for (int i = 0; i < 1000000; i++) {
    String echoMsg = myService.echo("你好..");
}

接口和实现类:

public interface EchoService {
    public String echo(String sayMessage);
}
public class EchoServiceImpl implements EchoService {
    public String echo(String sayMessage) {
        return "RE : " + sayMessage;
    }
}

源码位置:
    http://git.oschina.net/zycgit/rsf

转载于:https://my.oschina.net/ta8210/blog/386376

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值