我有一个系统,它动态地将骆驼上下文添加到正在运行的系统中。
从处理器内部检索有关上下文的信息是非常容易和方便的,但我没有想到比在处理器中定义的上下文更多地这样做的可能性。
是否有机会使用一个组件从所有上下文中检索状态?
发布于 2014-03-31 10:25:52
感谢彼特和克劳斯-易卜生!我采用了MBean方法。因为我停留在自己的VM中,所以我能够针对本地MBeanServer工作:
List<Map<String, String>> values = new ArrayList<>();
QueryExp qe = Query.isInstanceOf(new StringValueExp("org.apache.camel.management.mbean.ManagedCamelContext"));
MBeanServer ms = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> contexts = ms.queryNames(new ObjectName("org.apache.camel:*"), qe);
for (ObjectName context : contexts) {
Map<String, String> curMap = new HashMap<String, String>();
AttributeList al = ms.getAttributes(context, attributes);
List<Attribute> ale = al.asList();
for (int i = 0; i < ale.size(); i++) {
Attribute attribute = ale.get(i);
String val = attribute.getValue() != null ? attribute.getValue().toString() : "";
curMap.put(attribute.getName(), val);
}
values.add(curMap);
}使用例如attributes=new String[] { "CamelId", "MinProcessingTime", "MeanProcessingTime", "MaxProcessingTime" };,我可以检索我喜欢的信息。
骆驼在这一点上很棒;-)
发布于 2014-03-29 10:24:10
是的,正如Petter所说,您可以使用JMX。Apache公开了许多用于管理骆驼应用程序的JMX MBeans:http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/api/management/mbean/package-summary.html
不过,我还想指出的是,jolokia (http://jolokia.org/)使使用JMX更加容易,因为jolokia可以将JMX公开为REST服务。这使得客户端将该信息作为REST调用(例如通过HTTP)访问变得非常简单。
我们在hawtio控制台中使用这一点构建了一个用于管理HTML5应用程序的Java应用程序,该应用程序还有一个Camel插件。这允许我们使用这些REST服务来管理JVM或远程JVM中运行的所有Camels。
发布于 2014-03-28 17:12:14
有一个很好的软件可以安装/卸载/启动/停止camel上下文,您可能会尝试:阿帕奇卡拉夫。有一些指南这里。
也就是说,是的--您可以使用JMX轻松地访问其他骆驼上下文。上下文以MBeans的形式公开。您可能需要将JMX支持添加到动态运行时,这样才可能做到这一点。
您可以探索您有哪些选项,以及您的JMX公开是否可以使用j控制台。当然,您可以使用JMX api从代码中访问相同的操作。

https://stackoverflow.com/questions/22717446
复制相似问题