Java Supervisor RPC2 接口对接

news2024/11/19 5:41:01

1.引入xmlrpc-client

如果是C#语言,请参考《C#对接supervisor XML-RPC API 实现进程控制》

如何安装Supervisor,请参考《Linux进程守护—Supervisor(ubuntu)》

如果是Maven项目,则在pom.xml引入jar包

        <dependency>
            <groupId>org.apache.xmlrpc</groupId>
            <artifactId>xmlrpc-client</artifactId>
            <version>3.1.3</version>
        </dependency>

2.封装SupervisorUtils工具包

/**
 * Supervisor 方法封装
 * @author Mr.Li
 * @date 2023-05-30
 */
public class SupervisorUtils {
    /**
     * 执行supervisor控制命令
     * @param url 服务地址
     * @param username 用户名
     * @param password 密码
     * @param method 控制方法
     * @param params 参数
     */
    public static Object sendSupervisorCommand(String url,String username,String password,String method, Vector<Object> params){
        try {
            XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
            config.setServerURL(new URL(url));
            config.setBasicUserName(username);
            config.setBasicPassword(password);
            XmlRpcClient client = new XmlRpcClient();
            client.setConfig(config);
            return client.execute(method, params);
        }catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (XmlRpcException e) {
            e.printStackTrace();
            return null;
        }
    }
}

2.1.参数详解

2.1.1.url

http://localhost:9001/RPC2

其中localhost为你的IP地址,如果是本地可以使用localhost,或者127.0.0.1.

2.1.2.username/password

这里的用户名密码是你在安装supervisor时,supervisor配置文件中[inet_http_server]下配置的远程控制界面的用户名与密码。

 2.1.3.method

method是可以控制supervisor的方法,对应的清单如下(我定义了一个常量用来记录这些方法):

/**
 * Supervisor XML-RPC监控方法常量
 * @author Mr.Li
 * @date 2023-05-30
 */
public class SupervisorConstants {

    /**
     * 获取监控服务运行状态
     * 返回SupervisorStruct实体类
     */
    public static final String getState="supervisor.getState";

    /**
     * 关闭监控服务
     * 返回boolean
     */
    public static final String shutdown="supervisor.shutdown";

    /**
     * 重启监控服务
     * 返回boolean
     */
    public static final String restart="supervisor.restart";

    /**
     * 获取监控的所有进程信息
     * 返回ProcessStruct[]集合
     */
    public static final String getAllProcessInfo="supervisor.getAllProcessInfo";

    /**
     * 启动进程;
     * 参数1:group:name(String);
     * 参数2:wait:是否等待启动完毕(Boolean)
     * 返回boolean
     */
    public static final String startProcess="supervisor.startProcess";

    /**
     * 启动所有进程
     * 参数:wait:是否等待启动完毕(Boolean)
     * 返回ProcessStateStruct[]集合
     */
    public static final String startAllProcesses="supervisor.startAllProcesses";

    /**
     * 关闭进程
     * 参数1:group:name(String);
     * 参数2:wait:是否等待状态返回(Boolean)
     * 返回boolean
     */
    public static final String stopProcess="supervisor.stopProcess";

    /**
     * 关闭所有进程
     * 参数:wait:是否等待状态返回(Boolean)
     * 返回ProcessStateStruct[]集合
     */
    public static final String stopAllProcesses="supervisor.stopAllProcesses";

    /**
     * 重新加载配置文件
     * 返回一个实体object
     */
    public static final String reloadConfig="supervisor.reloadConfig";

    /**
     * 清理单个进程的日志,这里只是清理监控服务器对此进程记录的日志,并不是程序内部打印的日志
     * 参数:group:name(String);
     * 返回boolean
     */
    public static final String clearProcessLogs="supervisor.clearProcessLogs";
}

2.1.4.params

supervisor每个控制方法对应的参数不同,在方法常量里面有说明每个方法对应的参数项。

示例1:启动进程

    /**
     * 启动进程
     * @param id
     * @param group
     * @param name
     * @return
     */
    public boolean startProcess(String id,String group,String name){
        SupervisorConfig config=querySupervisorConfig(id);
        if(StringUtils.isNotBlank(config.getUrl())&&StringUtils.isNotBlank(config.getUserName())&&StringUtils.isNotBlank(config.getPassword())) {
            Vector<Object> params =new Vector<>();
            params.addElement(String.format("%s:%s",group,name));
            params.addElement(true);
            Object result = SupervisorUtils.sendSupervisorCommand(config.getUrl(),config.getUserName(),config.getPassword(), SupervisorConstants.startProcess,params);
            return Boolean.valueOf(result.toString());
        }else{
            return false;
        }
    }

其中group与name,在“supervisor.getAllProcessInfo”返回的结果集里面是包含了这些信息,示例如下:

[{"stderr_logfile":"","logfile":"/opt/gnss/analysis-server/run.log","start":1686387550,"description":"pid 24636, uptime 2 days, 17:11:15","pid":24636,"statename":"RUNNING","spawnerr":"","stop":1686387549,"now":1686622225,"name":"analysis-server","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/analysis-server/run.log","group":"analysis-server"},{"stderr_logfile":"","logfile":"/opt/gnss/apollo-api/run.log","start":1686617943,"description":"pid 28303, uptime 1:11:22","pid":28303,"statename":"RUNNING","spawnerr":"","stop":1686617942,"now":1686622225,"name":"apollo-api","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/apollo-api/run.log","group":"apollo-api"},{"stderr_logfile":"","logfile":"/opt/gnss/gps-server/run.log","start":1686320681,"description":"pid 7685, uptime 3 days, 11:45:44","pid":7685,"statename":"RUNNING","spawnerr":"","stop":1686320681,"now":1686622225,"name":"gps-server","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/gps-server/run.log","group":"gps-server"},{"stderr_logfile":"","logfile":"/opt/gnss/hc808-server/run.log","start":1686387543,"description":"pid 24569, uptime 2 days, 17:11:22","pid":24569,"statename":"RUNNING","spawnerr":"","stop":1686387542,"now":1686622225,"name":"hc808-server","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/hc808-server/run.log","group":"hc808-server"},{"stderr_logfile":"","logfile":"/opt/gnss/hciot-server/run.log","start":1686387535,"description":"pid 24460, uptime 2 days, 17:11:30","pid":24460,"statename":"RUNNING","spawnerr":"","stop":1686387535,"now":1686622225,"name":"hciot-server","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/hciot-server/run.log","group":"hciot-server"},{"stderr_logfile":"","logfile":"/opt/gnss/jt808-server/run.log","start":1686464923,"description":"pid 17339, uptime 1 day, 19:41:42","pid":17339,"statename":"RUNNING","spawnerr":"","stop":1686464923,"now":1686622225,"name":"jt808-server","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/jt808-server/run.log","group":"jt808-server"},{"stderr_logfile":"","logfile":"/opt/gnss/spartan-tracker/run.log","start":1686387554,"description":"pid 24724, uptime 2 days, 17:11:11","pid":24724,"statename":"RUNNING","spawnerr":"","stop":1686387553,"now":1686622225,"name":"spartan-tracker","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/spartan-tracker/run.log","group":"spartan-tracker"},{"stderr_logfile":"","logfile":"/opt/gnss/system-api/run.log","start":1686496975,"description":"pid 13304, uptime 1 day, 10:47:30","pid":13304,"statename":"RUNNING","spawnerr":"","stop":1686496974,"now":1686622225,"name":"system-api","exitstatus":0,"state":20,"stdout_logfile":"/opt/gnss/system-api/run.log","group":"system-api"}]

3.官方文档

上述每个接口返回有对应的应答参数,详情可以参考官方文档,我这里不做过多解释

XML-RPC API Documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解CSS中的flex布局

详解CSS中的flex布局 1、概念2、容器属性2.1 flex-direction2.2 flex-wrap2.3 flew-flow2.4 justify-content2.5 align-items2.6 align-content 3、元素属性3.1 order3.2 flex-grow3.3 flex-shrink3.4 flex-basis3.5 flex3.6 align-self 1、概念 弹性盒子&#xff08;display: …

如何系列 JMeter如何录制脚本

文章目录 方式1. 手动编写2. JMeter自带录制功能3. Fiddler录制4. Badboy录制5. Blazemeter录制 总结和使用感受 方式 1. 手动编写 最原始的方式&#xff0c;在线程组中根据研发提供的接口文档和浏览器的Network请求一个个手动录入&#xff0c;它可以提供更大的灵活性和控制力…

PostgreSQL 中的虚拟文件描述符

由于每个操作系统限制了一个进程能打开的文件数&#xff08;例如&#xff1a;ubuntu 为1024&#xff09;&#xff0c;因此进程能获得的文件描述符是有限的。对于经常需要打开许多文件的数据库进程来说&#xff0c;很容易会超过操作系统对于文件描述符数量的限制。 为解决这个问…

如何写好一份解决方案

1、前言 我们在日常工作中会不可避免要去编写各种方案&#xff0c;如技术方案、建设方案、项目建议书、实施方案、规划方案、解决方案等。 我们去浏览华为、阿里、腾讯、IBM、海尔等公司的官网&#xff0c;可以看到在首页比较显眼的位置&#xff0c;都有解决方案的入口&#…

Postcat X APISIX 合作插件 :一键同步,轻松配置到 APISIX

近日&#xff0c;云流科技&#xff08;广州&#xff09;有限公司&#xff08;简称“Eolink”&#xff09;旗下的开源 API 管理工具 Postcat 和深圳支流科技有限公司&#xff08;简称“API7 支流科技”&#xff09;在各自擅长的领域携手合作&#xff0c;推出了 Postcat & Ap…

R语言 tidyverse系列学习笔记(系列4)PlantGrowth - percentage table

本篇学习数据分析&#xff0c; Excel 表格制作 Task&#xff1a; 创建一个 行 百分比 表格 row percentage table 先看一下 PlantGrowth 数据集 library(dplyr)data("PlantGrowth") view(PlantGrowth)给数据集新加一列 weight_cat &#xff0c;并用 case_when 自定…

【React】: React的生命周期

概述 生命周期的每个阶段总是伴随着一些方法的调用&#xff0c;这些方法就是生命周期的钩子函数 钩子函数的作用&#xff1a;为开发人员在不同操作阶段提供了十几 只有 类组件 才有生命周期 生命周期的图片&#xff1a; 同时有&#xff1a; 1.1 创建时 的生命周期执行顺序 编写…

计划任务使用介绍

作者:lly 文章目录 前言一、使用说明1.1 发布模型1.2 创建并设置计划任务1.3 开启计划任务1.4 管理计划任务 二、结语 前言 iServer 11i(2023)对于处理自动化服务新增计划任务功能&#xff0c;该功能支持定时触发和监听文件变化触发执行模型&#xff0c;因此计划任务适用于以下…

Vite构建工具下Tinymce踩坑指南

背景 "vue": "^3.2.41","vite": "^3.2.3","tinymce": "^6.4.2","tinymce/tinymce-vue": "^5.1.0",坑1: 找不到zh-Hans.js等配置的文件 使用Tinymce需要配置中文汉化包、样式等。这些文件都是…

安全问题我们需要重视,立刻升级fastjson2

一、前言 小伙伴大家好&#xff0c;我是开源字节快速开发平台的作者。fastjson2.0 是fastjson的重要升级&#xff0c;目标是为下一个十年提供一个高性能的JSON库&#xff0c;同一套API支持JSON/JSONB两种协议。 近期fastjson 再报安全漏洞&#xff0c;直接给我们发送了高危告…

FastReport 2023.2新版, Delphi 和 Lazarus 核心产品将统一整合, 一起来看!

FastReport 是功能齐全的报表控件&#xff0c;可以帮助开发者可以快速并高效地为.NET&#xff0c;VCL&#xff0c;COM&#xff0c;ActiveX应用程序添加报表支持&#xff0c;由于其独特的编程原则&#xff0c;现在已经成为了Delphi平台最优秀的报表控件&#xff0c;支持将编程开…

风景类Midjouney prompt提示词

稳定输出优美风景壁纸的Midjouney prompt提示词。 1\在夏夜&#xff0c;有淡蓝色的星空&#xff0c;海边&#xff0c;流星&#xff0c;烟花&#xff0c;海滩上全是蓝色的玫瑰和绿色的植物&#xff0c;由Ivan Aivazovsky和Dan Mumford&#xff0c;趋势在cgsociety&#xff0c;柔…

HEIC→JPG

问题描述&#xff1a;图片格式由HEIC转JPG 解决办法&#xff1a;在网上找一个在线图片转格式的软件

我理解的参与开源贡献

坐标上海的E人&#xff0c;还在新手村练级的前端开发。曾闯荡过教育培训和零售管理行业&#xff0c;经历过大公司、外企&#xff0c;也和朋友的工作室合作过&#xff0c;斩获过一些能吓唬人的标签。好奇心很足&#xff0c;精力也很充沛&#xff0c;代码世界就是我现实生活中的霍…

【前后端实现文件下载或浏览】

前后端实现文件下载或浏览 背景前端后端java其他IO流分两种&#xff1b;字符流&字节流 背景 前端html\js\css,使用a标签或者iframe,笔者使用window.open(url)—重新打开标签页地址栏显示的接口路径;后端返回客户端[HttpServletResponse] 文件流&#xff08;以附件的方式[a…

建设现代化智慧十防档案室所需要的技术性方案

一、库房温湿度对档案的影响 库房的温湿度&#xff0c;过高过低都会影响档案制成材料的耐久性。高温高湿会加速纸张的老化水解&#xff0c;使危害档案制成材料的霉菌、细菌繁殖&#xff0c;并增强光化作用&#xff0c;使有害气体、灰尘吸附能力增大。但低温低湿会使纸张变脆&a…

VXLAN 主机VTEP(EVPN)

EVE环境模拟搭建一个基于主机VTEP的VXLAN数据中心网络。 实验里vtep是在linux主机上&#xff0c;同时linux主机还得有路由功能使VTEP的端点IP可达&#xff0c;所以两台linux服务器需要安装FRR。 数据转发平面使用VXLAN封装&#xff1b;在控制平面我打算选择使用EVPN和OVN两种不…

数据中台的商机

阿里拆中台了&#xff0c;很多人来问数据中台还要不要的问题&#xff0c;我认为中台总是要有的&#xff0c;无非是薄厚的问题。然后又有人来问数据中台价值创造的问题&#xff0c;这个其实是数据中台最核心的问题&#xff0c;我就来正式聊一聊&#xff0c;里面有很多的批判&…

T900:可以完美替代P900的国产900MHz无线跳频模块

目录 国产T900模块及其系列成品 T900模块 T900成品 国产T900模块及其系列成品 T900模块及其系列成品&#xff0c;是专门针对无人机及机器人行业设计的&#xff0c;尺寸小、性能优越&#xff0c;可以完美替代microhard的P900产品。下面向大家介绍下T900的相关情况&#xff1…

Dubbo负载均衡策略之 一致性哈希 | 京东云技术团队

本文主要讲解了一致性哈希算法的原理以及其存在的数据倾斜的问题&#xff0c;然后引出解决数据倾斜问题的方法&#xff0c;最后分析一致性哈希算法在Dubbo中的使用。通过这篇文章&#xff0c;可以了解到一致性哈希算法的原理以及这种算法存在的问题和解决方案。 一、负载均衡 …