3

我有一个 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 对 JMX 有广泛的支持,允许您使用 JMX 客户端监视和控制 Camel 管理的对象。在实践中,我启用了 JMX 代理

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

这会导致一系列 Camel 信息显示为 mbeans(例如,从 VisualVM 中看到),在“端点”下没有关于我的 Producer 演员的信息。

我试过用

@ManagedResource

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

“在 Camel 2.1 以后,只有单例端点被注册,因为在使用数千或数百万个端点的情况下,非单例的开销会很大。这可能发生在使用收件人列表 EIP 或来自发送大量消息的 ProducerTemplate 时。 "

我想知道我的 Producer 演员是否因此不公开信息(我不清楚究竟是什么类型的端点是由 Producer trait 产生的)。

我到底需要做什么来为我的 akka-camel 端点启用 JMX 监控(由于使用 Producer 特征)?

编辑: 维克多指出我需要重新定义配置属性。这是必要的,但还不够。还需要强制 Camel 管理您的端点。我不得不添加这个:

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

2 回答 2

2

Akka 文档非常广泛。

akka {
  camel {
  # Whether JMX should be enabled or disabled for the Camel Context
  jmx = off
  …
  }
}
于 2013-07-16T19:24:57.813 回答
1

我将从在这里查看最新的 Akka Camel Docs 开始。如果您向下滚动一点,您将看到一个名为 的标题CamelExtension。在此标题下,您将看到有关如何让CamelContext系统使用的信息。一旦你有了CamelContext,你会注意到它上面有一个方法叫做setManagementStrategy. 您应该能够使用它来设置ManagedManagementStrategy(doc here)的实例,并希望这将启用您需要的 JMX 优点。我说希望是因为我不确定,因为我自己没有尝试过。

于 2013-07-16T15:19:17.323 回答