zoukankan      html  css  js  c++  java
  • dapeng-soa启动分析

    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.启动流程

    image

    • 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 文档.
    
  • 相关阅读:
    滚动监听+导航固顶
    选项卡 || 图片切换
    绝对定位下如何居中?
    选项卡+轮播的实现
    设置mysql 及其他应用程序 自动启动
    边框阴影 模糊值 x轴偏移值 y轴偏移值 模糊半径 阴影半径 || 颜色 insect,其中阴影半径可以为负值,意思是增加或减少指定数值的阴影半径
    form表单中的 下拉菜单 所有的省份
    媒体查询 屏幕超过页面上版心的宽度时 ,(也就是所有内容能显示出来),不让它有滚动条 【解决了因为banner图的原因出现滚动条的问题】
    jenkins 安全权限及注册新的测试角色使用
    git基础概念(和svn的优劣)
  • 原文地址:https://www.cnblogs.com/hhbk/p/9546679.html
Copyright © 2011-2022 走看看