Apache camel 获取有关VM中定义的所有上下文的信息

Apache camel 获取有关VM中定义的所有上下文的信息,apache-camel,Apache Camel,我有一个系统,它可以动态地向正在运行的系统添加Camel上下文 从处理器中检索有关上下文的信息非常容易和方便,但我没有想到在处理器定义的上下文之外还可以这样做 是否有机会使用单个组件从所有上下文检索状态?有一个很好的软件,可以动态安装/卸载/启动/停止camel上下文,您可能希望尝试:。有一些准则 也就是说,是的-您可以使用访问其他Camel上下文。这些上下文作为MBean公开。您可能需要将JMX支持添加到动态运行时中,以便实现这一点 您可以使用jconsole探索您有哪些选项,以及您的JMX暴

我有一个系统,它可以动态地向正在运行的系统添加Camel上下文

从处理器中检索有关上下文的信息非常容易和方便,但我没有想到在处理器定义的上下文之外还可以这样做


是否有机会使用单个组件从所有上下文检索状态?

有一个很好的软件,可以动态安装/卸载/启动/停止camel上下文,您可能希望尝试:。有一些准则

也就是说,是的-您可以使用访问其他Camel上下文。这些上下文作为MBean公开。您可能需要将JMX支持添加到动态运行时中,以便实现这一点

您可以使用jconsole探索您有哪些选项,以及您的JMX暴露是否有效。当然,您可以使用从代码访问相同的操作。

是的,你可以像佩特说的那样使用JMX。Apache Camel公开了许多JMX MBean来管理Camel应用程序:

然而,我还要指出jolokia(),它使使用JMX变得更加容易,因为jolokia可以将JMX公开为REST服务。这使得客户端访问这些信息变得很简单,因为它只是一个REST调用(例如通过HTTP)

我们在hawtio web控制台中使用它来构建一个用于管理Java应用程序的HTML5 web应用程序,它也有一个Camel插件。这允许我们使用这些REST服务来管理JVM或远程JVM中运行的所有CAMEL


    • 感谢@petter和@claus ibsen!我采取了MBean方法。因为我呆在自己的虚拟机内,所以我能够针对本地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);
          }
      
      List values=new ArrayList();
      QueryExp qe=Query.isInstanceOf(新的StringValueExp(“org.apache.camel.management.mbean.ManagedCamelContext”);
      MBeanServer ms=ManagementFactory.getPlatformMBeanServer();
      Set contexts=ms.queryNames(新对象名(“org.apache.camel:”),qe);
      for(ObjectName上下文:上下文){
      Map curMap=newhashmap();
      AttributeList al=ms.getAttributes(上下文,属性);
      List ale=al.asList();
      对于(int i=0;i
      例如,
      attributes=newstring[]{“CamelId”、“MinProcessingTime”、“MeanProcessingTime”、“MaxProcessingTime”}我可以检索我喜欢的信息


      骆驼在这一点上很棒;-)

      感谢MBean的提示!感谢JMX/MBean的提示!