在上一篇 Blog 文中,我们了解到 RSF 的整体设计一共是分了 9 个层次。这一篇 Blog 我们来专门介绍 RSF 是如何将服务发布出去的。我们简称服务暴露。

什么是服务暴露?

    让我们先来看一张图,直观的感受到服务暴露的具体意义。

RSF 分布式 RPC 服务信息的暴露

    首先讲一下什么是服务暴漏,服务暴露简单地讲就是把服务接口信息收集起来然后加以管理。对于服务提供者(Provider)来说,当有服务调用请求进来时可以快速的找到服务对象并加以调用。而对于服务消费者(Customer)来说,服务暴露则可以为发起服务调用时提供充足 RPC 请求信息。

服务信息定义

    现在我们知道了什么是服务暴露,接下来我们探一探 RSF 对于服务是如何进行描述的。

    RSF 的服务信息,是由 RsfBindInfo 接口进行最高级别的抽象。这个接口继承自 Hasor 的 BindInfo,下面还有 3个子类。先上一张类图加一说明。

RSF 分布式 RPC 服务信息的暴露

    父接口就不多说了,目前来说无外乎就是公用方法。以后会在 Hasor 的底层上进行打通。下面三个子类各有个的作用,这个需要介绍一下。

    首先 RsfBindInfoWrap 子类,它就像名字里的 Wrap 所表达的一样,他就是一个包装类。里面什么都没干。这个类的作用是,当我们想要扩展 RsfBindInfo 并增加一些属性时。我们不需要去修改底层的实现类,只需要继承包装类并加上自己的转有属性就可以。---- 这是典型的装饰模式的应用

    其次 ServiceDomain 类,这个类是一个领域模型 Bean 在这里保存了大量的属性信息,RsfBindInfo 接口中所表达的所有属性,在这个类里都能找到它们的身影。下面这张图显示了,这个类都定义了哪些属性。

RSF 分布式 RPC 服务信息的暴露

    最后 ServiceDefine 这个类比较特殊,大家或许觉得。服务的所有信息在上面 ServiceDomain 类中已经定义好了,那么 ServiceDefine 究竟是什么作用呢?

    我们先进去一探究竟,下面这个类是 ServiceDefine 的节选。

RSF 分布式 RPC 服务信息的暴露

    大家可以看到,它是通过装饰模式扩展了 RsfBindInfoWrap 并定义了一些自己的属性。这些属性里面我们看到。和 ServiceDomain 不同,ServiceDomain 类中定义的都是服务的基本信息。而这里的属性都是服务运行调用时紧密相关的一些数据。

    例如:filterList,这个属性里保存了服务的定义的所有私有 RsfFilter,而 customerProvider 属性我们可以通过它获取服务对象。此外 oriFlowControl 表示了服务的流控规则。

服务注册

    服务注册的目的是为了,让当有服务消费者想要消费服务的时候可以有信息可以查询。这就需要引入注册中心的角色。下面图中表示了 RSF 中注册中心的地位。

RSF 分布式 RPC 服务信息的暴露

    在 RSF  中,注册中心是一个独立的功能。并且位于“net.hasor.rsf.center”包下。前面在服务信息定义小节已经明确服务信息所包含的信息,现在就开看看注册中心对于服务信息的类图关系。

RSF 分布式 RPC 服务信息的暴露

    从类图中也可以看到,RSF 的注册中心对于服务定义的描述十分直接。一个基类另外两个字类一个表示服务提供者,另外一个表示为服务消费者。接下来我们来看一看 RSF 注册中心是如何启动的。

    注册中心的运行分为 客户端 和 服务端。

    客户端:客户端负责收集 RSF 的所有服务信息,并形成上面两个对应的注册中心 Bean 。而服务端负责收集并管理这些 Bean。

    在 RSF 中注册中心客户端的启动入口是“net.hasor.rsf.center.client.RsfCenterModule”,Center 服务端启动入口为“net.hasor.rsf.center.server.bootstrap.RsfCenterFrameworkModule”。

    有兴趣的同学可以更佳深入的去分析里面的实现逻辑。

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

相关文章:

  • 2021-09-17
  • 2021-11-10
  • 2021-10-03
  • 2022-12-23
  • 2022-01-20
  • 2021-10-30
猜你喜欢
  • 2021-05-31
  • 2021-10-11
  • 2022-12-23
  • 2021-12-06
  • 2022-01-12
  • 2021-04-13
相关资源
相似解决方案