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();

    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析+爬虫+机器学习)

这里写目录标题 基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析爬虫机器学习)一、项目概述二、微博热词统计析三、微博文章分析四、微博评论分析五、微博舆情分析六、项目展示七、结语 基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析爬虫机器学习) 一、项目概…

2023年第十四届蓝桥杯大赛软件类省赛CC++大学C 组真题(代码完整题解)

C题-三国游戏⭐ 标签&#xff1a;贪心 简述&#xff1a;三个国家初始人数都为0&#xff0c;n个事件&#xff0c;第i个事件若发生每个国家分别加Ai&#xff0c;Bi&#xff0c;Ci人&#xff0c;求最多发生几个事件使得两个国家人数之和小于第三国 链接&#xff1a;三国游戏 思…

深入解析消息认证码(MAC)算法:HmacMD5与HmacSHA1

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 引言一、消息认证码&#xff08;MAC&#xff09;简介二、HmacMD5算法HmacMD5算法的工作原理 三、HmacSHA1算法HmacSHA1算法的…

直流马达驱动芯片D6289ADA介绍

应用领域 适用于智能断路器&#xff08;家用或工业智能空开&#xff09;、新能源汽车充电枪锁、电动玩具、电磁门锁、自动阀门等的直流电机驱动。 功能介绍 D6289ADA是一款直流马达驱动芯片&#xff0c;它有两个逻辑输入端子用来控制电机前进、后退及制动。该电路具有良好的抗干…

2024软件设计师备考讲义——(8)

操作系统 〇、操作系统概述 OS作用、OS特征、OS分类 作用&#xff1a;提高计算机效率&#xff0c;人机交互友好特征&#xff1a;并发性、共享性、虚拟性、不确定性分类&#xff1a;批处理、分时、实时、网络、分布式、微机嵌入式操作系统&#xff1a;微型化、可定制、实时性、可…

岭师大数据技术原理与应用-序章-软工版

HeZaoCha-CSDN博客 序章—软工版 一、环境介绍1. VMware Workstation Pro2. CentOS3. Java4. Hadoop5. HBase6. MySQL7. Hive 二、系统安装1. 虚拟网络编辑器2. 操作系统安装 三、结尾 先说说哥们写这系列博客的原因&#xff0c;本来学完咱也没想着再管部署这部分问题的说&…

卷积神经网络(CNN)——基础知识整理

文章目录 1、卷积神经网络 2、图片格式 3、图片卷积运算 4、Kernel 与 Feature Map 5、padding/边缘填充 6、Stride/步长 7、pooling/池化 8、shape 9、epoch、batch、Batch Size、step 10、神经网络 11、激活函数 1、卷积神经网络 既然叫卷积神经网络&#xff0c;这里面首先是…

设计模式——结构型——外观模式Facade

处理器类 public class Cpu {public void start() {System.out.println("处理器启动了...");} } 内存类 public class Memory {public void start() {System.out.println("内存启动了...");} } 硬盘类 public class Disk {public void start() {Syste…

【娱乐】战双帕弥什游戏笔记攻略

文章目录 Part.I IntroductionChap.I Information Part.II 新手攻略Chap.I 角色和武器挑选Chap.II 新手意识推荐 Part.II 阵容搭配Chap.I 一拖二Chap.II 毕业队 Reference Part.I Introduction 2019年12月5日全平台公测。 偶然间入坑战双&#xff0c;玩了几天&#xff0c;觉得…

V R虚拟现实元宇宙的前景|虚拟现实体验店加 盟合作|V R设备在线购买

VR&#xff08;虚拟现实&#xff09;技术作为一种新兴的技术&#xff0c;正在逐渐改变人们的生活和工作方式。随着技术的不断进步&#xff0c;人们对于元宇宙的概念也越来越感兴趣。元宇宙是一个虚拟世界&#xff0c;通过VR技术可以实现人们在其中进行各种活动和交互。 元宇宙的…

戴尔灵越3000来说2.5G的双核显存能干啥?

吃鸡已经成为大家耳熟能详的网络游戏。 很多人认为&#xff0c;想要享受吃鸡的乐趣&#xff0c;就必须组装一台高端电脑。 虽然配置越高越好&#xff0c;但现实是很多配置都是以性能为标准的。 有余了&#xff0c;没必要刻意追求高配置、高特效。 说实话&#xff0c;吃鸡不一定…

【Qt】:多种方式编辑hello world

多种方式编辑hello world 一.QLabel二.对象树三.使用单行编辑框四.使用按钮 (小技巧&#xff1a;1.可以使用F4来进行头文件和对应cpp文件的切换&#xff1b;2.写完一个函数的声名之后,按下altenter,就可以自动的在对应的cpp 文件中添加函数的定义了.) 一.QLabel 注意这里是QSt…

数据可视化基础与应用-04-seaborn库从入门到精通01-02

总结 本系列是数据可视化基础与应用的第04篇seaborn&#xff0c;是seaborn从入门到精通系列第1-2篇。本系列的目的是可以完整的完成seaborn从入门到精通。主要介绍基于seaborn实现数据可视化。 参考 参考:数据可视化-seaborn seaborn从入门到精通01-seaborn介绍与load_datas…

【SpringCloud】Ribbon负载均衡

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

java多线程中的阻塞队列

一、普通不阻塞队列 还记得队列我们如何实现吗&#xff1f;我们用的是循环队列的方式&#xff0c;回一下&#xff1a; 描述&#xff1a;开始tail和head指针都指向最开始位置&#xff0c;往里面添加元素tail&#xff0c;出元素head 初始状态&#xff1a; put元素后状态 take…

KOSMOS-2.5: A Multimodal Literate Model

KOSMOS-2.5: A Multimodal Literate Model 相关链接&#xff1a;arXiv 关键字&#xff1a;multimodal、literate model、text-intensive images、Transformer architecture、document-level text recognition 摘要 我们介绍了KOSMOS-2.5&#xff0c;这是一个用于机器阅读文本密…

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

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

这6个png免抠素材网,免费下载,值得收藏!

找png免抠素材&#xff0c;就上这6个网站&#xff0c;免费下载&#xff0c;可商用。设计师必备&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/searchlist/66008----all-0-1.html?vNTYxMjky 网站主要分享设计素材为主。像平面海报、免抠元素、背景图…

前端学习<二>CSS基础——08-CSS属性:定位属性

CSS的定位属性有三种&#xff0c;分别是绝对定位、相对定位、固定定位。 position: absolute; <!-- 绝对定位 -->​position: relative; <!-- 相对定位 -->​position: fixed; <!-- 固定定位 -->​ 下面逐一介绍。 相对定位 相对定位&#xff1a;让…

经典永不过时 Wordpress模板主题

经得住时间考验的模板&#xff0c;才是经典模板&#xff0c;带得来客户的网站&#xff0c;才叫NB网站。 https://www.jianzhanpress.com/?p2484