dapeng-soa 1.Scala-sbt插件 sbt 是 Scala 项目管理工具,类似于 Java 中的 Maven. 1.1.ThriftGeneratorPlugin 生成 Thrift 代码及资源 1.2.RunContainerPlugin 运行大鹏服务 1.3.DbGeneratePlugin 数据库生成插件 1.4.Imag
dapeng-soa
1.Scala-sbt插件
sbt 是 Scala 项目管理工具,类似于 Java 中的 Maven.
1.1.ThriftGeneratorPlugin 生成 Thrift 代码及资源
1.2.RunContainerPlugin 运行大鹏服务
1.3.DbGeneratePlugin 数据库生成插件
1.4.ImageGeneratorPlugin镜像生成器
2.大鹏容器分析
2.1.启动流程
- 2.1.1.大鹏容器启动类com.github.dapeng.bootstrap.Bootstrap.
备注:soa.base属性参数用于指定容器目录.且有默认值. 1. main(String[] args)及sbtStartup(ClassLoader containerClassLoader, List<URL> applicationLibs) 用来初始化ClassLoader.初始化ClassLoader完成后, 调用startup(ClassLoader containerCl, List<ClassLoader> applicationCls). 2.startup 方法. 调用com.github.dapeng.api.ContainerFactory类的CreateContainer 方法创建容器. 然后再获取已创建的容器,最后调用容器的startup方法完成启动.
- 2.1.2.容器工厂com.github.dapeng.api.ContainerFactory
利用 JAVA 服务加载动态加载容器并实例化.
- 2.1.3.大鹏容器接口com.github.dapeng.api.Container
大鹏容器的主结构,负责管理容器相关的监听器,插件,应用程序。 所有的组件的注册,卸载动作都应该由Container来负责 方法void startup()用于启动容器.
- 2.1.4.大鹏容器实现com.github.dapeng.impl.container.DapengContainer
以插件和过滤器的方法实现容器,实现容器的可扩展性.
注意:属性配置soa.run.mode,默认为 plugin startup()方法实现 1.插件列表 SpringAppLoader 插件 ZookeeperRegistryPlugin 插件 TaskSchedulePlugin 插件 NettyPlguin 插件 MBeanAgentPlugin 插件 以下两个插件只在 Soa.run.mode为 plugin 时执行. LogbackPlugin 插件 ApiDocPlugin 插件 以上插件构造完成后,执行 start()方法启用插件. 2.过滤器列表 过滤器分成容器过滤器应用过滤器. LogFilter HeadFilter
- 2.1.5.SpringAppLoader 插件
实现方式:加载 Spring 配置文件初始化Spring 容器.Spring 配置文件路径为META-INF/spring/services.xml 使用org.springframework.context.support.ClassPathXmlApplicationContext加载类型为com.github.dapeng.core.definition.SoaServiceDefinition的 Bean. 将前一步得到的 SoaServiceDefinition 列表转换为Map<String,ServiceInfo> 构建DapengApplication 调用Spring的 ApplicationContext的start()方法启动. 接着执行下面各种注册 Map<ProcessorKey, SoaServiceDefinition<?>> serviceDefinitionMap = toSoaServiceDefinitionMap(appInfos, processorMap); container.registerAppProcessors(serviceDefinitionMap); container.registerAppMap(toApplicationMap(serviceDefinitionMap, application)); container.registerApplication(application); //fire a zk event 至此 Spring 加载完成启动完成.
- 2.1.6.ZookeeperRegistryPlugin插件
连接到Zookeeper中心 将每个应用的每个服务向注册中心注册,以便调用者可以通过 Zookeeper 发现.
- 2.1.7.TaskSchedulePlugin
遍历每个应用的服务,如果服务被施加 ScheduledTask 注解,则调用 runTask(ServiceInfo serviceinfo)方法. 下面我们一起看看 runTask 方法实现. a.获取服务方法中被施加ScheduledTaskCron注解的方法,获取服务定义. b.逐个执行以下操作: b.1.提取方法的 Cron 表达式. b.2.构建quartz调用的 JobDetail 对象. b.3.构建CronTriggerImpl 对象,注入Cron 表达式. b.4.单一调用器构建及启动 b.5.提交任务. c.任务的具体执行参考 StdSchedulerFactory
- 2.1.8.NettyPlugin
启动 Netty 监听所有客户端请求,即实现 RPC 调用,具体分析请参考大鹏远程通信分析.
- 2.1.8.MBeanAgentPlugin
注册 MBean 信息.
- 2.1.9.LogbackPlugin
启用 Logback 记录日志.
- 2.1.10.ApiDocPlugin
启动线程监听配置的文档端口,以供 HTTP 访问 API 文档.