我在c#中的当前项目需要从kafka服务器获取未复制分区的数量。我可以在mbeans部分的jconsole中查看这个,但我需要在c#程序中获取值。我尝试使用NetMX和这段代码进行初始连接。
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
INetMXConnector connector = NetMXConnectorFactory.Connect(new Uri("http://<myserver>:<jmxport>"), null);
IMBeanServerConnection remoteServer = connector.MBeanServerConnection;
在第二行引发“未找到部分”错误,我想知道是否有人可以帮忙解决这个问题?
答案 0 :(得分:0)
我认为NetMX不会连接到Java JMX端点。这是一个专门针对DotNet的“独立”实现。
最好的办法是将Jolokia java-agent加载到目标Kafka服务器中。 Jolokia通过HTTP / REST接口公开JMX,您可以通过C#访问它。
您可以尝试IKVM(CLR的java字节代码,它将为您提供可以调用的Java JMX兼容DLL.IKVM是一个将Java字节代码转换为.NET字节代码的编译器。标准JMX远程处理在C#客户端工作正常。
答案 1 :(得分:0)
在参考您的Jolokia配置时,您可能需要完全限定jar的路径。我看起来像这样并且有效:
readConfiguration
当我以非守护进程模式启动Kafka时,它会打印出来:
export JOLOKIA_HOME=/libs/java/jolokia/1.3.7
export JOLOKIA_JAR=$JOLOKIA_HOME/jolokia-jvm-1.3.7-agent.jar
export KAFKA_OPTS="-javaagent:$JOLOKIA_JAR=port=7778,host=* $KAFKA_OPTS"
然后我将浏览器指向http://localhost:7778/jolokia/search/ :,然后我得到:
I> No access restrictor found, access to any MBean is allowed
Jolokia: Agent started with URL http://10.8.36.121:7778/jolokia/