一 服务的注册
当一个请求输入时,MessageRouter是通过ServantFactory来创建服务实例的。所以当一个服务请求想要得到相应的响应,必须在Alogic中在MessageRouter中,ServantFactory的典型初始化如下:
ServantFactory通过配置文件加载得到一个ServantFactory的实例,ServantFactory类继承了Configurable方法,configure重写了方法。当进行实例化时候,ServantFactory的注册如下:
服务的注册涉及到以下几个关键的类:
- ServantFactory: 服务工厂
- ServantRegistry: 服务注册表,用于为服务工厂提供服务规格配置信息
- ServantCatalog: 服务目录,某类服务的集合
先在LogicBusApp.java中,采用如下方式初始化ServantFactory配置:
ServantFactory的初始化会将配置文件中<sf module="com.logicbus.backend.QueuedServantFactory">解析,并将<servantFactory: QueuedServantFactory>这个键值对写入到Setting中。 在MessageRouter中,随后在Setting文件读取Setting类的配置并实例化一个QueuedServantFactory类。
二 服务注册表的加载
Abstract作为ServantFactory的内部抽象类,重写了XMLConfigurableconfigure(Element e, Properties p)的方法。该方法能够读取Alogic的配置并实例化一个ServantRegistry。 在ServantFactory的Abstract抽象类将如下配置文件中解析,从而实例化一个ServantRegistry。
一个服务配置的配置文件如下:
三 服务目录的加载
ServantManager继承了ServantRegistry接口的Abstract实现类,ServantManager负责从服务目录中读取服务规格信息,可支持一到多个服务目录.配置文件地址可以从web.xml或者全局参数中读取, 它通过如下方式,获取服务指定的服务目录,并将获得的服务目录输入到如下数据结构中:
四 服务的注册
服务目录ServantCatalog是一个接口,通过服务目录的加载配置文件来决定要实例化哪个对象。从如下一个服务目录配置进行分析:
TogetherServantCatalog继承了XMLResourceServantCatalog,XMLResourceServantCatalog是ServantCatalog的一个接口实现类。当实例化TogetherServantCatalog服务目录之后,执行configure方法,会调用子类的loadDocument方法:
该方法将服务的信息加载,并存到一个XML文档中,即Document类中。用于保存服务的路径信息。
五 服务的调用
服务通过XML被配置后,当一个Http请求进来时候,alogic获取服务实例的逻辑如下:
- 初始化ServantFactory
- 获取服务实例池
- 从服务实例池中拿服务实例,并执行
- 执行服务逻辑
- 返回Http响应报文
以上就是alogic中一个服务被调用的流程。