首页 > 学院 > 开发设计 > 正文

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

2019-11-08 03:23:29
字体:
来源:转载
供稿:网友

设计实现方式: 抽象工厂模式+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类

字段

类型描述
nameString名称
groupString组名
descriptionString描述信息
startString启动时间戳
stopString结束时间戳
nowString当前时间戳
statusString状态
statusNameString状态名称
exitStatusint退出状态
logFileString日志文件内容
stdoutFileString日志文件内容
pidint进程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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表