0

我在看这个 SO question,但在这里我只希望 Caffeine 开始向 JMX 报告。

我已经添加了一个 application.conf 文件,并通过 -Dconfig.file 引用它:

caffeine.jcache {
  # A named cache is configured by nesting a new definition under the caffeine.jcache namespace. The
  # per-cache configuration is overlaid on top of the default configuration.
  default {
    # The monitoring configuration
    monitoring {
      # If JCache statistics should be recorded and externalized via JMX
      statistics = true

      # If the configuration should be externalized via JMX
      management = true
    }
}

它不起作用,但我怀疑它可能与 jcache 有关,但不确定实现此基本监控的预期方式是什么。

4

1 回答 1

1

缓存实例在由 CacheManager 实例化时向 MBean 服务器注册。以下测试使用编程 api 来简化测试。

public final class JmxTest {

  @Test
  public void jmx() throws MalformedObjectNameException {
    var config = new CaffeineConfiguration<>();
    config.setManagementEnabled(true);
    config.setStatisticsEnabled(true);

    var manager = Caching.getCachingProvider().getCacheManager();
    var cache = manager.createCache("jmx", config);
    cache.put(1, 2);

    var server = ManagementFactory.getPlatformMBeanServer();
    String name = String.format("javax.cache:type=%s,CacheManager=%s,Cache=%s",
        "CacheStatistics", manager.getURI().toString(), cache.getName());
    var stats = JMX.newMBeanProxy(server, new ObjectName(name), CacheStatisticsMXBean.class);
    assertThat(stats.getCachePuts()).isEqualTo(1);
  }
}

如果您不需要 JCache 进行集成,那么您可能更喜欢使用本机 API 和指标库。它由 Micrometer、Dropwizard Metrics 和 Prometheus 客户端支持。虽然 JCache 非常适合框架集成,但它的 api 是死板的并且会导致令人惊讶的性能问题。

于 2021-11-11T17:39:00.000 回答