如何为akka-camel端点启用JMX监视

时间:2013-07-15 15:19:05

标签: scala apache-camel akka

我有一个Akka应用程序(akka 2.2.0,akka-camel,camel 2.10.5)。 该应用程序包括生产者组件,即:

class MyProducer extends Actor with Producer with akka.actor.ActorLogging {
...

我希望Camel能够通过JMX自动公开这些生成器的监视属性,查看已交换的消息数,平均时间,吞吐量等。

理论上Apache Camel has extensive support for JMX to allow you to monitor and control the Camel managed objects with a JMX client。实际上,我已经启用了JMX代理

    <jmxAgent
            id="agent"
            disabled="false"
            createConnector="true"
            usePlatformMBeanServer="true"
            mbeanServerDefaultDomain="localhost"
            registryPort="1346"
            registerAlways="true"
            registerNewRoutes="true"
            />

导致一系列Camel信息显示为mbeans(例如,从VisualVM中看到)但是,而没有关于“端点”下我的Producer actor的信息。

我尝试用

装饰演员
@ManagedResource

这似乎没有任何效果。 文档说

  

“在Camel 2.1以后,只有单独的端点被注册为   非单身人士的开销在以下情况下将是巨大的   使用了数千或数百万个端点。这可能发生在   使用收件人列表EIP或从发送批次的ProducerTemplate   消息。 “

我想知道我的制作人演员是否因为这个而没有公开信息(我不清楚究竟什么是Producer特征导致的端点类型)。

我需要做些什么来为我的akka​​-camel端点启用JMX监控(由于使用Producer特性而产生)?

修改 Viktor指出我需要重新定义配置属性。 这是必要的,但还不够。还需要强制Camel管理您的端点。我不得不补充一点:

camelContext.addRegisterEndpointCallback(new EndpointStrategy {
  def registerEndpoint(name: String, ep: Endpoint) = {
    camelContext.getManagementStrategy.manageObject(ep)
    ep
  }
})

2 个答案:

答案 0 :(得分:2)

Akka文档非常广泛。

akka {
  camel {
  # Whether JMX should be enabled or disabled for the Camel Context
  jmx = off
  …
  }
}

答案 1 :(得分:1)

我首先看一下最新的Akka Camel Docs here。如果向下滚动一下,您将看到一个名为CamelExtension的标题。在此标题下,您将看到有关如何获取系统使用的CamelContext的信息。获得CamelContext后,您会注意到有一个名为setManagementStrategy的方法。您应该可以使用它来设置ManagedManagementStrategy(doc here)的实例,并希望这将启用您需要的JMX优点。我有希望地说,因为我不确定,因为我自己没有尝试过。