1.服务启动流程图如下

image.png

1.1 启动传输服务,如下

image.png

详细
1. 在SCBEngine引擎的run方法中,调用transportManager.init(this);完成启动传输服务
2. TransportManager通过SPI发现Transport接口实现类,VertxRestTransport是其中之一,也是ServiceComb使用的传输服务,这个是构建在Vertx框架上。
3. Vertx做了啥,可以看到RestServerVerticle是Vertx框架的业务实现,这里实现类ServiceComb微服务的rest service服务
4. TransportManager通过服务发现,找到VertxHttpDispatcher,这个是ServiceComb路由分发器。准备好这些资源之后,就开始启动Vertx了。

image.png

详细:
1. RestServerVerticle 启动start,如果是ProducerProvider有endpoint,继续往下启动rest服务。否则返回
2. 启动rest服务之前,做一些路由Handler挂载,最重要的是VertxHttpDispatcher挂载。通过init把路由挂载到VertxHttpDispatcher中,后续的请求通过路由到达VertxHttpDispatcher,进行分发。
3. 一切就绪,启动http rest服务。

1.2 浅谈ServiceComb对象实例化几种方式

ServiceComb类对象实例化有3种方式:Spring容器bean、SPI加载、xml反序列化获取class对象后通过反射创建实例:

以Spring容器作为启动引擎,
1.CseApplicationListener 监听ContextRefreshedEvent事件(表示spring上下文刷新完成,bean已经准备好), 开始初始化SCBEngine,启动微服务

2.SCBEngine启动后,部分类的实例化通过SPI进行,比如ProducerProvider添加 SPIServiceUtils.getOrLoadSortedService(ProducerProvider.class)

3.Handler配置定义在cse.handler.xml, 不用spring加载 spring一般用于加载单例;因为SCB对每个微服务 + invocationType,都对应一个handler实例 ,通过AbstractHandlerManager的craete来创建,通过JacksonXmlRootElement解析xml配置获取类对象


ThinkFault
16 声望2 粉丝