美文网首页
sofa-runtime插件

sofa-runtime插件

作者: 瑜骐 | 来源:发表于2018-11-02 13:48 被阅读0次

简介

sofa-runtime插件主要解决的是Biz模块之间的通信问题 sofa-runtime整体框图

流程

SofaRuntimeActivator插件启动器

Biz模块事件监听处理

SofaEventHandler对应的代码如下:

public class SofaEventHandler implements EventHandler {
    @Override
    public void handleEvent(ArkEvent event) {
        if (Constants.BIZ_EVENT_TOPIC_UNINSTALL.equals(event.getTopic())) {
            doUninstallBiz((BizEvent) event);
        } else if (Constants.BIZ_EVENT_TOPIC_HEALTH_CHECK.equals(event.getTopic())) {
            doHealthCheck((BizEvent) event);
        }
    }

    private void doUninstallBiz(BizEvent event) {
        SofaRuntimeProperties.unRegisterProperties(event.getBiz().getBizClassLoader());
        SofaRuntimeManager sofaRuntimeManager = getSofaRuntimeManager(event.getBiz());
        SofaFramework.unRegisterSofaRuntimeManager(sofaRuntimeManager);
        sofaRuntimeManager.shutdown();
    }

    private void doHealthCheck(BizEvent event) {
        SofaRuntimeManager sofaRuntimeManager = getSofaRuntimeManager(event.getBiz());
        if (!sofaRuntimeManager.isHealthCheckPassed()) {
            throw new RuntimeException("Health check failed.");
        }
    }

    private SofaRuntimeManager getSofaRuntimeManager(Biz biz) {
        for (SofaRuntimeManager sofaRuntimeManager : SofaFramework.getRuntimeSet()) {
            if (sofaRuntimeManager.getAppClassLoader().equals(biz.getBizClassLoader())) {
                return sofaRuntimeManager;
            }
        }
        throw new RuntimeException("No SofaRuntimeManager Found!");
    }

    @Override
    public int getPriority() {
        return DEFAULT_PRECEDENCE;
    }
}

doUninstallBiz方法调用 sofaRuntimeManager.shutdown()方法进行应用程序关闭,实际调用的是StandardSofaRuntimeManager.shutdown方法,代码如下:

public void shutdown() throws ServiceRuntimeException {
        try {
            for (ApplicationShutdownCallback callback : applicationShutdownCallbacks) {
                callback.shutdown();
            }
            if (componentManager != null) {
                componentManager.shutdown();
            }
            clear();
        } catch (Throwable throwable) {
            throw new ServiceRuntimeException(throwable);
        }
    }

在applicationShutdownCallbacks中注册了CloseApplicationContextCallBack这个关闭回调,这个CloseApplicationContextCallBack代码如下:

public class CloseApplicationContextCallBack implements ApplicationShutdownCallback,
                                            ApplicationContextAware {

    private ApplicationContext cxt;

    @Override
    public void shutdown() {
        if (cxt instanceof AbstractApplicationContext) {
           // 调用spring application context进行关闭
            ((AbstractApplicationContext) cxt).close();
        } else {
            throw new RuntimeException(String.format("%s is not instanceof %s, can not be closed.",
                cxt.getClass(), AbstractApplicationContext.class));
        }
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        cxt = applicationContext;
    }
}

JVM service发布应用

类DynamicJvmServiceProxyFinder实现了JVM内部之间的服务发布和引用,通过服务组件ServiceComponent来进行服务的发布和引用

参考

  1. http://www.sofastack.tech/sofa-boot/docs/Module-Service

相关文章

  • sofa-runtime插件

    简介 流程 Biz模块事件监听处理 SofaEventHandler对应的代码如下: doUninstallBiz...

  • React配置过程中用到的插件汇总

    ●react插件●react-dom插件●react-router插件●react-redux插件●babel插件...

  • iOS项目实战02

    修改插件:查找插件 -> 插件路径(不能记) -> Xcode插件开发 -> 查看插件代码 -> 搜索instal...

  • 5.文档 - gitbook - 插件

    参考 官方插件 重点参考 GitBook 插件 常用插件 配置插件 到 官方插件 上找合适的插件 在配置文件中安装...

  • FCPX系列的插件怎么安装导入?Final cut pro x插

    fcpx插件怎么安装? Fcpx插件怎么解压安装?fcpx插件怎么卸载?fcpx插件怎么添加?fcpx lut插件...

  • Cordova 插件更新

    查看项目插件列表 移除插件 添加插件

  • IDEA破解

    配置插件 配置仓库 下载插件 使用插件

  • Cordova 本地插件

    1 安装插件环境 2 创建插件 例子 添加配置 进入插件文件夹下初始化插件 插件使用

  • Webpack入门之plugins篇

    入门篇主要先学学插件的使用,不涉及自定义插件。 首先 插件分为:内置插件和外部插件。 内置插件例如BannerPl...

  • Gradle中插件的使用

    目录 插件的类型 插件的类型分为:1.脚本插件2.二进制插件 插件的使用 1.脚本插件的使用 脚本插件的使用方法如...

网友评论

      本文标题:sofa-runtime插件

      本文链接:https://www.haomeiwen.com/subject/emaqxqtx.html