gpt4 book ai didi

java - JMX:从服务器读取属性

转载 作者:行者123 更新时间:2023-11-30 07:17:30 25 4
gpt4 key购买 nike

我们使用 Adob​​e CQ (5.5) 作为 CMS。现在,我们的 CQ 环境包括一个作者服务器,用户可以在其中创建内容,以及 2 个将内容提供给互联网的发布服务器。

现在有一个复制代理将内容从作者服务器推送到两个发布服务器。不幸的是,一些文章阻塞了复制代理的队列,所以没有更多的新内容被发布。这不是什么大问题,因为它很容易修复。真正的问题是,直到用户开始提示没有更多更改被发布时,我们才注意到这种阻塞。

我四处搜索,发现 CQ 提供了一个 JMX API,监控应用程序可以将其自身附加到该 API 上。然后我试图找到一些允许我配置警报的开源软件,以便我们可以更快地使用react,但我找不到任何东西。

此时我决定尝试编写自己的 Java 应用程序,它只读取属性并在属性为真时发送邮件。我想这比我想象的要复杂。

首先,我不是 Java 开发人员,但由于 CQ 是基于 Java 的,所以我想我会试一试。我阅读了一些关于 JMX 和 Java 的文档,并且能够与 CQ 服务器建立有效连接。但这几乎是我能意识到的一切。

我发现 com.adobe.granite.replication 类有一个 agent 类型,它为每个复制代理存储一个 id(id 是复制代理的名称,例如 id=replication-publish-1)。每个复制代理都有不同的属性,但与我相关的属性是“QueueBlocked”。

这是我目前得到的代码(它基于 this 示例):

public static void main(String[] args) {
try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://servername:9010/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

ClientListener listener = new ClientListener();

MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

// This outputs the domains, one of them is com.adobee.granite.replication, the one which I need to use
// This is why I'm sure that at least the connection works, I don't have any com.adobe.granite.replication class on my Eclipse installation, so the output has to come from the server
String domains[] = mbsc.getDomains();
for (int i = 0; i < domains.length; i++) {
echo("\tDomain[" + i + "] = " + domains[i]);
}

ObjectName replication = new ObjectName("com.adobe.granite.replication:type=Agent,id=replication-publish-1");

mbsc.getAttribute(replication, "QueueBlocked"); // This throws the error
} catch(Exception e) {

}

抛出的错误如下:

javax.management.InstanceNotFoundException: com.adobe.granite.replication:type=Agent,id=replication-publish-1

据我所知,我应该创建某种实例,但我真的不知道什么实例以及如何创建它。我真的很感激我能得到的任何帮助,无论是文档还是代码片段:)

最佳答案

解决了:)

这是我正在使用的代码:

import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import javax.management.Attribute;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class Client {

public static void main(String[] args) {
try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://servername:9010/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

ObjectName replication1 = new ObjectName("com.adobe.granite.replication:type=agent,id=\"replication-publish-1\"");
ObjectName replication2 = new ObjectName("com.adobe.granite.replication:type=agent,id=\"replication-publish-2\"");

String replication1Status = mbsc.getAttribute(replication1, "QueuePaused").toString();
String replication2Status = mbsc.getAttribute(replication2, "QueuePaused").toString();



} catch (Exception e) {
e.printStackTrace();
}
}
}

关于java - JMX:从服务器读取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16081417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com