测量消息到达Akka Streams Flow或Sink的速率

时间:2017-09-09 18:41:21

标签: akka akka-stream

我已经编写了一个Akka Streams应用程序,它的工作正常。

我想要做的是将我的JMX控制台连接到运行Akka Streams应用程序的JVM,然后研究进入我的接收器和流程的消息量。

这可能吗?我用Google搜索,但没有找到具体的方法。

我的应用程序的最后阶段是Cassandra数据库的接收器。我想知道每秒进入Sink的消息率。

我还想在我的图表中选择一个随机流,然后知道流经流量的每秒消息数。

有没有开箱即用的东西?或者我应该只在我的每个流程中编写类似dropwizard的代码来测量速率。

1 个答案:

答案 0 :(得分:2)

目前,您无法利用“开箱即用”来监控Akka Stream内的费率。

但是,这是一个非常简单的工具,您可以在监控Flow中提取,您可以将其放置在符合您需求的任何地方。

以下示例基于Kamon,但您可以看到它可以非常轻松地移植到Dropwizard:

  def meter[T](name: String): Flow[T, T, NotUsed] = {
    val msgCounter = Kamon.metrics.counter(name)

    Flow[T].map { x =>
      msgCounter.increment()
      x
    }
  }

  mySource
    .via(meter("source"))
    .via(myFlow)
    .via(meter("sink"))
    .runWith(mySink)

以上是您可以在this repo找到的演示的一部分。 像这样的临时解决方案具有为您的应用量身定制的优势,同时保持简洁性。