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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值