RPC工程 supervisord系统管理服务器进程

2/22/2017来源:ASP.NET技巧人气:1503

设计实现方式: 抽象工厂模式+xml+HTTP流响应方式

描述:管理服务器上的进程状态信息,进程关闭,开启,日志信息等

调用代码测试类:

200并发篱栅压测

final static String api = "http://115.29.163.148:9001/RPC2";
    final static String userName = "zhubo";
    final static String passWord = "123456";
    final static String namespace = "supervisor";
    //初始化
    static XmlRpcFactory xmlRpcFactory = null;
    public static void main(String[] args) throws InterruptedException {
        
        xmlRpcFactory = new SimpleXMLRpcFactory();
        int size = 200;
        CyclicBarrier cb = new CyclicBarrier(size);
        ExecutorService service = Executors.newFixedThreadPool(size);
        System.out.PRintln(new Date());
        for(int i =0;i<size;i++){
            service.execute(new rpcThread(cb));
        }
        service.shutdown();
        //调用API
        while(true){
            if(!service.isTerminated()){
                Thread.sleep(1000);
            }else{
                System.out.println(new Date());
                break;
            }
        }
      //监控请求成功,失败,异常记录
     for(SimpleXMLPRC rpc :SimpleXMLRpcFactory.getRegistries()) {
            Map<String, Set<XmlRpcCount>>  maprpc = rpc.getCounter();
            System.out.println(maprpc.get(Constants.SUCCESS).size());
            //System.out.println(JSON.toJSONString(maprpc.get(Constants.SUCCESS)));//成功
            System.out.println(JSON.toJSONString(maprpc.get(Constants.FAILURE)));//失败
            System.out.println(JSON.toJSONString(maprpc.get(Constants.ERROR)));//异常
            AtomicInteger atomicInteger = new AtomicInteger(0);
            for(XmlRpcCount xmlRpcCount :maprpc.get(Constants.SUCCESS)){
                atomicInteger.incrementAndGet();
                System.out.println(atomicInteger.get()+"---"+JSON.toJSONString(xmlRpcCount));
            }
        }
        
    }
    static  class  rpcThread implements Runnable{
        private CyclicBarrier cb;
        public rpcThread( CyclicBarrier cb ){
            this.cb = cb;
        }
        @Override
        public void run() {
            try {
                cb.await();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // TODO Auto-generated method stub
            SimpleXMLPRC simpleXMLPRC =(SimpleXMLPRC) xmlRpcFactory.getXmlRpc(api, userName, password, namespace);
            simpleXMLPRC.getAPIVersion();
            com.yuntai.yw.supervisord.tools.Process process = simpleXMLPRC.getProcessInfo("dubbo:hs-med-service-queue");
        }
        
    }

JSON样板数据

{"description":"pid 31164, uptime 0:00:05","exitStatus":0,"group":"dubbo","logFile":"/tmp/supervisor/hs-med-service-queue.log","name":"hs-med-service-queue","pid":31164,"start":"1484534147","stateName":"RUNNING","stdoutFile":"/tmp/supervisor/hs-med-service-queue.log","stop":"1484534146"}

进程Process类

字段

类型 描述
name String 名称
group String 组名
description String 描述信息
start String 启动时间戳
stop String 结束时间戳
now String 当前时间戳
status String 状态
statusName String 状态名称
exitStatus int 退出状态
logFile String 日志文件内容
stdoutFile String 日志文件内容
pid int 进程Pid

API:

方法API 参数 说明
public String getAPIVersion();   获取api版本号
public XmlRpc namespace(String namespace); namespace 空间(默认supervisor) 根据namespace获取调用实例
public XmlRpc proxy(String host, int port); host 请求url 及port端口 根据url及端口  获取调用实例
public XmlRpc auth(String username, String password); 用户名   密码 鉴权实例
public String getSupervisorVersion();   安装在服务器上的supervisor版本号
public String getIdentification();   实例名一般为空间namespace名(服务器上配置)
public Map<String, Object> getState();   服务器上的supervisor服务状态
public int getPID();   服务器上的supervisor服务的进程id
public String readLog(int offset, int length) ; 日志开始位置 及长度 日志内容
public boolean clearLog();   清除supervisor服务日志文件
public boolean shutdown();   关闭supervisor服务
public boolean restart();   重启supervisor服务
public Process getProcessInfo(String processName); supervisor管理下的进程名 进程信息
public Object[] getAllProcessInfo();   获取所有进程信息
public boolean startProcess(String processName, boolean waitToStart); 进程名  是否等待 启动服务器上进程名
public Object[] startAllProcesses(boolean waitToStart); 是否等待 启动服务器上所有进程
public boolean startProcessGroup(String groupName, boolean waitToStart); 组名  是否等待 根据组名 启动各个进程
public boolean stopProcess(String processName, boolean waitToStop); 进程名  是否等待 关闭服务器上进程名
public boolean stopProcessGroup(String groupName, boolean waitToStop) ; 组名  是否等待 根据组名 关闭各个进程
public Object[] stopAllProcesses(boolean waitToStop) ; 是否等待 关闭服务器上所有进程

资源地址:http://download.csdn.net/detail/pajiakuo/9756525