在上一篇 Blog 文中,咱们了解到 RSF 的总体设计一共是分了 9 个层次。这一篇 Blog 咱们来专门介绍 RSF 是如何将服务发布出去的。咱们简称服务暴露。bootstrap
让咱们先来看一张图,直观的感觉到服务暴露的具体意义。ide
首先讲一下什么是服务暴漏,服务暴露简单地讲就是把服务接口信息收集起来而后加以管理。对于服务提供者(Provider)来讲,当有服务调用请求进来时能够快速的找到服务对象并加以调用。而对于服务消费者(Customer)来讲,服务暴露则能够为发起服务调用时提供充足 RPC 请求信息。spa
如今咱们知道了什么是服务暴露,接下来咱们探一探 RSF 对于服务是如何进行描述的。设计
RSF 的服务信息,是由 RsfBindInfo 接口进行最高级别的抽象。这个接口继承自 Hasor 的 BindInfo,下面还有 3个子类。先上一张类图加一说明。server
父接口就很少说了,目前来讲无外乎就是公用方法。之后会在 Hasor 的底层上进行打通。下面三个子类各有个的做用,这个须要介绍一下。对象
首先 RsfBindInfoWrap 子类,它就像名字里的 Wrap 所表达的同样,他就是一个包装类。里面什么都没干。这个类的做用是,当咱们想要扩展 RsfBindInfo 并增长一些属性时。咱们不须要去修改底层的实现类,只须要继承包装类并加上本身的转有属性就能够。---- 这是典型的装饰模式的应用。继承
其次 ServiceDomain 类,这个类是一个领域模型 Bean 在这里保存了大量的属性信息,RsfBindInfo 接口中所表达的全部属性,在这个类里都能找到它们的身影。下面这张图显示了,这个类都定义了哪些属性。接口
最后 ServiceDefine 这个类比较特殊,你们或许以为。服务的全部信息在上面 ServiceDomain 类中已经定义好了,那么 ServiceDefine 到底是什么做用呢?cli
咱们先进去一探究竟,下面这个类是 ServiceDefine 的节选。扩展
你们能够看到,它是经过装饰模式扩展了 RsfBindInfoWrap 并定义了一些本身的属性。这些属性里面咱们看到。和 ServiceDomain 不一样,ServiceDomain 类中定义的都是服务的基本信息。而这里的属性都是服务运行调用时紧密相关的一些数据。
例如:filterList,这个属性里保存了服务的定义的全部私有 RsfFilter,而 customerProvider 属性咱们能够经过它获取服务对象。此外 oriFlowControl 表示了服务的流控规则。
服务注册的目的是为了,让当有服务消费者想要消费服务的时候能够有信息能够查询。这就须要引入注册中心的角色。下面图中表示了 RSF 中注册中心的地位。
在 RSF 中,注册中心是一个独立的功能。而且位于“net.hasor.rsf.center”包下。前面在服务信息定义小节已经明确服务信息所包含的信息,如今就开看看注册中心对于服务信息的类图关系。
从类图中也能够看到,RSF 的注册中心对于服务定义的描述十分直接。一个基类另外两个字类一个表示服务提供者,另一个表示为服务消费者。接下来咱们来看一看 RSF 注册中心是如何启动的。
注册中心的运行分为 客户端 和 服务端。
客户端:客户端负责收集 RSF 的全部服务信息,并造成上面两个对应的注册中心 Bean 。而服务端负责收集并管理这些 Bean。
在 RSF 中注册中心客户端的启动入口是“net.hasor.rsf.center.client.RsfCenterModule”,Center 服务端启动入口为“net.hasor.rsf.center.server.bootstrap.RsfCenterFrameworkModule”。
有兴趣的同窗能够更佳深刻的去分析里面的实现逻辑。