TongWeb7.0-8.0Java代码使用JMX获取应用通道端口

以下通过java代码实现获取TongWeb7.0/8.0应用通道端口使用到的JMX均为TongWeb自带的JMX功能。

一、TongWeb7.0

1、使用本地JMX获取应用通道端口

public String getTw7PortByLocalJmx() {

    try {

MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();

       Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),

       Query.match(Query.attr("name"), Query.value("tong-http-listener")));

      

       String port =((ObjectName) objectNames.iterator().next()).getKeyProperty("port");

       return "getTw7PortByLocalJmx channel tong-http-listener port = " + port;

    } catch (Exception e) {

       e.printStackTrace();

       return "error : " + e.getMessage();

    }

}

2、使用远程JMX获取应用通道端口

public String getTw7PortByRemoteJmx() {

    try {

       String ipAndPort = "192.168.5.26:7200";

       String serviceUrl = String.format("service:jmx:rmi://%s/jndi/rmi://%s/jmxrmi", ipAndPort, ipAndPort);

       JMXServiceURL jmxUrl = new JMXServiceURL(serviceUrl);

      

       Map<String, String[]> env = new HashMap<String, String[]>();

       env.put(JMXConnector.CREDENTIALS, new String[] { "thanos", "thanos123.com" });

      

       JMXConnector jmxConnector = JMXConnectorFactory.connect(jmxUrl, env);

       MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();

      

       Set<ObjectName> objectNames = mbsc.queryNames(new ObjectName("*:type=Connector,*"), Query.match(Query.attr("name"), Query.value("tong-http-listener")));

      

       String port =((ObjectName) objectNames.iterator().next()).getKeyProperty("port");

       return "getTw7PortByRemoteJmx channel tong-http-listener port = " + port;

      

    } catch (Exception e) {

       e.printStackTrace();

       return "error : " + e.getMessage();

    }

}

二、TongWeb8.0

1、使用本地JMX获取应用通道端口

(1)使用本地JMX时需要先在对应的tongweb实例中开启注册本地Mbean的功能。入口:对应tongweb实例==》基础配置==》全局配置==》JMX

(2)相关代码

public String getTw8PortByLocalJmx() {

    try {

       MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();

       Object[] params = { "Connector", "server" };

       String[] signature = { String.class.getName(), String.class.getName() };

      

       Object result = beanServer.invoke(new ObjectName("TongWeb:name=server"), "show", params, signature);

      

       ObjectMapper mapper = new ObjectMapper();

       String jsonString = mapper.writeValueAsString(result);

      

       JSONObject jsonObject = JSONObject.parseObject(jsonString);

       String port = jsonObject.getString("port");

      

       return "getTw8PortByLocalJmx channel server port = " + port;

      

    } catch (Exception e) {

       e.printStackTrace();

       return "error : " + e.getMessage();

    }

}

2、使用远程JMX获取应用通道端口

(1)使用远程JMX时需要先在对应的tongweb实例中开启JMX接口功能。入口:集中管理==》系统管理==》JMX接口==》启用

(2)创建新的系统管理员用户专门用于远程JMX连接。

原因:为了保证用户的登录安全,当使用某用户通过浏览器登录控制台后,若再使用相同的用户通过 REST\JMX\命令行等接口接入,该用户在浏览器上的会话会被强制终止(即被踢出,需要重新登录)。

入口:集中管理==》安全配置==》管理员==》创建

(3)使用新用户登录并修改新用户的初始密码

(4)使用security用户登录tongweb给新用户赋予管理员角色

(5)相关代码

public String getTw8PortByRemoteJmx() {

    try {

       String ipAndPort = "192.168.5.28:7200";

       String serviceUrl = String.format("service:jmx:rmi://%s/jndi/rmi://%s/server", ipAndPort, ipAndPort);

       JMXServiceURL jmxUrl = new JMXServiceURL(serviceUrl);

      

       Map<String, Object> environment = new HashMap<>();

       environment.put(JMXConnector.CREDENTIALS, new String[] { "jmxuser", "Tongweb135..", null, "true" });

       JMXConnector connector = JMXConnectorFactory.connect(jmxUrl, environment);

       connector.connect();

       MBeanServerConnection connection = connector.getMBeanServerConnection();

      

       Object[] params = { "Connector", "server" };

       String[] signature = { String.class.getName(), String.class.getName() };

      

       Object result = connection.invoke(new ObjectName("TongWeb:name=server"), "show", params, signature);

      

       ObjectMapper mapper = new ObjectMapper();

       String jsonString = mapper.writeValueAsString(result);

      

       JSONObject jsonObject = JSONObject.parseObject(jsonString);

       String port = jsonObject.getString("port");

      

       return "getTw8PortByRemoteJmx channel server port = " + port;

      

    } catch (Exception e) {

       e.printStackTrace();

       return "error : " + e.getMessage();

    }

}

建议使用上面的代码方式,下面的方式需要删除字符串首尾的“[]”,代码写死,如果服务器返回数据结构发生变化会报错。

public String getTw8PortByRemoteJmx() {

    try {

       String ipAndPort = "192.168.5.28:7200";

       String serviceUrl = String.format("service:jmx:rmi://%s/jndi/rmi://%s/server", ipAndPort, ipAndPort);

       JMXServiceURL jmxUrl = new JMXServiceURL(serviceUrl);

      

       Map<String, Object> environment = new HashMap<>();

       environment.put(JMXConnector.CREDENTIALS, new String[] { "jmxuser", "Tongweb135..", null, "true" });

       JMXConnector connector = JMXConnectorFactory.connect(jmxUrl, environment);

       connector.connect();

       MBeanServerConnection connection = connector.getMBeanServerConnection();

      

       Properties properties = new Properties();

       properties.setProperty("name", "server");

      

       Object result = connection.invoke(new ObjectName("TongWeb:name=console"), "callServerMethod",

           // modelName action 参数

           new Object[] { "connector", "show", properties },

           new String[] { String.class.getName(), String.class.getName(), Properties.class.getName() });

      

       JSONObject jsonObject = JSONObject.parseObject(String.valueOf(result));

       String models = jsonObject.getString("models");

       models = models.substring(1, models.length() - 1);

       jsonObject = JSONObject.parseObject(models);

      

       String port = jsonObject.getString("port");

       return "getTw8PortByRemoteJmx channel server port = " + port;

      

    } catch (Exception e) {

       e.printStackTrace();

       return "error : " + e.getMessage();

    }

}

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

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

相关文章

SOLIDWORKS二次开发参数化设计软件 慧德敏学

SOLIDWORKS参数化设计软件-SolidKits.AutoWorks专为规格变化多、变化规律强的产品开发&#xff0c;将变化规律集成到三维设计软件&#xff0c;通过一键点击实现自动化产品再设计&#xff0c;如智能选型、自动化修改产品属性、产品参数、产品状态、图纸更新、重命名、并自动打包…

LeetCode:300最长递增子序列 C语言

300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

小程序中使用less

在vscode中安装插件 找到左下角齿轮的设置&#xff0c;点击右边图标&#xff0c;进入“settings.json” 加上以下代码配置 "less.compile":{"outExt": ".wxss"}

Mysql数据库:日志管理、备份与恢复

目录 前言 一、MySQL日志管理 1、存放日志和数据文件的目录 2、日志的分类 2.1 错误日志 2.2 通用查询日志 2.3 二进制日志 2.4 慢查询日志 2.5 中继日志 3、日志综合配置 4、查询日志是否开启 二、数据备份概述 1、数据备份的重要性 2、备份类型 2.1 从物理与…

镜舟普元揭秘数据中台新范式,引领企业数智化转型与创新实践

在当前数字化浪潮中&#xff0c;数据中台的角色越发重要&#xff0c;承担着将一切业务数据化的重任。近日&#xff0c;北京镜舟科技有限公司&#xff08;简称“镜舟”&#xff09;与普元信息技术股份有限公司&#xff08;简称“普元”&#xff09;联合举办“数据中台新范式”云…

matplotlib 绘图

matplotlib 绘图 方便设置legend图例的位置 ax1.legend(loc‘upper center’, bbox_to_anchor(0.3, -0.1)) ax2.legend(loc‘upper center’, bbox_to_anchor(0.6, -0.1)) import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm from scipy.inter…

【SpringCloud】Ribbon负载均衡

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

解决Chrome浏览器打开flags页面时出现黑屏问题的方法

当我们在使用Chrome浏览器并尝试访问flags页面时&#xff0c;遇到屏幕短暂闪烁或变黑的情况&#xff0c;这可能与启用的硬件加速功能有关。硬件加速是Chrome浏览器的一个功能&#xff0c;旨在利用计算设备的GPU来提高视频播放和图形渲染的性能。然而&#xff0c;在某些情况下&a…

类的成员之三:构造器(Constructor)

类的成员之一&#xff1a;成员变量 (field) 类的成员之二&#xff1a;方法 (method) 我们 new 完对象时&#xff0c;所有成员变量都是默认值&#xff0c;如果我们需要赋别的值&#xff0c;需要挨个为它们再赋值&#xff0c;太麻 烦了。我们能不能在new 对象时&#xff0c;直接…

MySql实战--全局锁和表锁 :给表加个字段怎么有这么多阻碍

今天我要跟你聊聊MySQL的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源&#xff0c;当出现并发访问的时候&#xff0c;数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围&#xff0c;MySQL里面的锁大致可以分成…

三元组数据模型:构建知识图谱的基石

目录 前言1. 三元组数据模型概述1.1 定义与结构1.2 特点 2. 三元组在知识图谱中的应用2.1 知识表示2.2 知识推理2.3 数据整合 3 三元组的数据格式3.1 N-Triples &#xff1a;3.2 RDF/XML &#xff1a;3.3 Turtle &#xff08;又称为 Terse RDF Triple Language&#xff09;&…

一、JAVA集成海康SDK

JAVA集成海康SDK 文章目录 JAVA集成海康SDK前言一、项目依赖 jar1. examples.jar2. 项目依赖 jna.jar,可以通过 maven依赖到。二、集成SDK1.HcNetSdkUtil 海康 SDK封装类2.HCNetSDK3.Linux系统集成SDK三、总结前言 提示:首先去海康官网下载 https://open.hikvision.com/dow…

Flink-CDC 无法增量抽取SQLServer数据

1.问题 因部署在WindowsServer服务器SQLServer发生过期后重启&#xff0c;Flink-CDC同步进行作业重启&#xff0c;启动后无报错信息&#xff0c;数据正常抽取。但是观察几天后发现当天数据计算指标无法展示 2.定位 因为没用进行任何修改&#xff0c;故初步判断不是因Flink-C…

多线程的学习1

多线程 线程是操作系统能够进入运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 进程&#xff1a;是程序的基本执行实体。 并发&#xff1a;在同一个时刻&#xff0c;有多个指令在单个CPU上交替执行。 并行&#xff1a;在同一时刻&#xff0c…

成都正信晟锦:现在借了钱不还的人怎么处理

在金钱往来中&#xff0c;“借钱不还”的现象时有发生&#xff0c;这不仅损害了债权人的利益&#xff0c;也破坏了社会的信任基础。面对这种情形&#xff0c;我们应当采取何种措施予以解决? 预防胜于治疗。出借前应充分评估借款人的信用状况&#xff0c;必要时要求提供相应的担…

安科瑞智慧安全用电综合解决方案

概述 智慧用电管理云平台是智慧城市建设的延伸成果&#xff0c;将电力物联网技术与云平台的大数据分析功能相结合&#xff0c;实现用电信息的可视化管理&#xff0c;可帮助用户实现安全用电&#xff0c;节约用电&#xff0c;可靠用电。平台支持web&#xff0c;app&#xff0c;微…

Qt与编码

ASCII码:一个字节&#xff0c;256个字符。 Unicode:字母&#xff0c;汉字都占用两个字节。 utf-8:字母一个字节&#xff0c;汉字3个字节。 gbk:字母一个字节&#xff0c;汉字2个字节。 gb2312:可以表示汉字&#xff0c;gb2312<gbk。 编码查看&#xff1a; https://www.…

2024知乎广告推广怎么做,知乎推广教程!

随着社交媒体影响力的日益增强&#xff0c;知乎作为中国高质量知识分享社区的代表&#xff0c;已经成为品牌方精准触达目标受众的重要阵地。云衔科技凭借其专业的一站式广告服务能力&#xff0c;为企业提供知乎广告开户及代运营解决方案&#xff0c;助力企业在知乎平台上实现品…

跨域及解决办法

跨域及解决办法 一、什么是跨域 1.跨域&#xff1a;浏览器对于javascript的同源策略的限制 。 2.同源政策的目的&#xff0c;是为了保证用户信息的安全&#xff0c;防止恶意的网站窃取数据。 设想这样一种情况&#xff1a;A 网站是一家银行&#xff0c;用户登录以后&#xf…

Vue——案例01(查询用户)

一、案例实现页面 二、案例实现效果 1. 查询效果 2. 年龄升序 3. 年龄降序 4. 原顺序 三、案例实现思路 1. 定义界面所需标签样式 <div id"app"><h2>查询用户:</h2><input type"text" placeholder"请输入名字"/><b…