Cornerstone(基石)两种寄生方式

Cornerstone(基石)两种寄生方式

Cornerstone(基石)是携程框架部门研发的内部可视化组件VI的开源版本,VI产品创意来源于ebay同名产品VI,VI是validation internals的缩写,字面意思可以理解为“内部验证”。你可以将VI理解为应用的窗口。 VI的一个目标就是把原本的应用黑盒子,变成一个透明的盒子。 在携程,VI主要是一个应用及应用相关环境的可视化工具,和应用健康状态及启动管理的工具(目前已是ctrip集团健康检测和点火标准)。 将开源版本命名为cornerstone是希望在这个组件里解决更多的基础问题,让开发和运营更简单和高效。

如何使用
(特别注意:目前VI只支持JDK>=1.7应用)

VI接入有两种模式,寄生模式和自主模式。

寄生模式

如果项目有WEB容器可以使用寄生模式,否则只能接入自主模式。

web和spring项目pom.xml只需依赖vi的jar包即可使用。

com.ctrip.framework cornerstone 0.2.0-alpha 当web或spring boot应用使用默认的寄生模式接入VI后,VI会接管[应用路径]/@in的路径。 例如tomcat应用,如果部署完成后的访问根路径为http://localhost:8080/tomcat-demo, 那么可以使用 http://localhost:8080/tomcat-demo/@in 来访问VI。

自主模式

项目应用中不管是否存在WEB容器都可接入自主模式。

web和spring项目pom.xml需依赖vi的jar包,以及VIServer类所需jar包。

com.ctrip.framework cornerstone 0.2.0-alpha org.eclipse.jetty jetty-servlet 9.0.0.RC2 如果项目启动报java.lang.ClassNotFoundException: javax.servlet.DispatcherType,则需要指定javax.servlet-api的版本号。 javax.servlet javax.servlet-api 3.1.0 compile 需导入VIServer.java类,然后通过bean注入进项目中,完成启动时的初始化。 其中“9999”是VI自定义的端口号。 在应用启动完成后,通过http://localhost:9999/@in来访问VI。

Cornerstone(基石)源码路径:https://github.com/ctripcorp/vi

运行里面的spring-boot-example项目可快速了解VI。

import com.ctrip.framework.cs.IgniteManager;
import com.ctrip.framework.cs.StaticContentServlet;
import com.ctrip.framework.cs.SysKeys;
import com.ctrip.framework.cs.VIApiServlet;
import com.ctrip.framework.cs.servlet.AuthenticationFilter;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.DispatcherType;
import java.lang.invoke.MethodHandles;
import java.util.EnumSet;

public class VIServer {
    private volatile boolean running = false;
    private static Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
    Server server;
    ServletHandler handler;

    public static ServletHandler bind(Server server, String id){
        return bind(server,id,false);
    }
    public static ServletHandler bind(Server server, String id, boolean useVIAuthentication){
        ServletHandler handler = null;
        System.setProperty(SysKeys.TOMCATCONTEXTPATH, id);
        try {
            handler = new ServletHandler();
            server.setHandler(handler);

            handler.addServletWithMapping(VIApiServlet.class, "/@in/api/*");
            handler.addServletWithMapping(StaticContentServlet.class, "/@in/*");
            if(useVIAuthentication){
                handler.addFilterWithMapping(AuthenticationFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
            }
            IgniteManager.ignite();
        }catch (Exception e){
            logger.error("start vi server failed!",e);
        }
        return handler;
    }

    public VIServer(int listenPort, boolean useVIAuthentication) throws Exception {

        server = new Server(listenPort);
        handler = bind(server, String.valueOf(listenPort),useVIAuthentication);
        this.start();
    }

    public VIServer(int listenPort) throws Exception {
        this(listenPort,false);
    }

    public VIServer(){
    }

    public Server getInnerServer(){
        return server;
    }

    public ServletHandler getHandler(){
        return handler;
    }

    synchronized public void start() throws Exception {
        if(!running){
            server.start();
            running=true;
        }
    }

    synchronized public void stop() throws Exception {
        if(running){
            server.stop();
            running =false;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值