轻量化的分布式服务框架 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存在的问题:
java


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

2.不支持多语言客户端。这个是体力活,若是去支持的话RSF是能够作到的。由于RSF传输协议是自有的传输协议,多语言要解决的只有序列化的问题。 git

例子: bootstrap

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();

客户端: app

//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 异步

相关文章
相关标签/搜索