[spring-projects/spring-boot]使用 Reactive/WebFlux Web 应用程序时,Jolokia Actuator Endpoint 不可用

2024-04-10 298 views
2

将依赖项添加到 WebFlux(而非 MVC)Web 应用程序时jolokia-core,由于应用程序类型条件匹配失败,因此未启用 Jolokia 执行器端点。

JolokiaEndpointAutoConfiguration": {
          "notMatched": [
            {
              "condition": "OnWebApplicationCondition",
              "message": "not a servlet web application"
            }
          ],
          "matched": [
            {
              "condition": "OnClassCondition",
              "message": "@ConditionalOnClass found required class 'org.jolokia.http.AgentServlet'"
            }
          ]
        },

有没有办法让它在 WebFlux 应用程序中工作?

回答

9

@aantonoJolokiaEndpoint将 Jolokia 的 servlet 公开为执行器端点,并且特定于 Spring MVC 和 Jersey 等 servlet 环境。

您能否详细说明为什么您希望在 WebFlux 应用程序中使用 Jolokia 执行器?

3

我正在构建一个基于 Spring Cloud Gateway 的项目,它使用 WebFlux...但我想通过 Actuator 端点依靠 HTTP 上的 Jolokia JMX 来控制各种设置,并且非常惊讶地发现它不是可在 WebFlux 类型的网络应用程序中使用...

您能否详细说明为什么在 WebFlux 应用程序中公开 Jolokia 执行器端点不是一个合理的期望?

3

这是一个servlet。 Servlet 与 webflux 不兼容。

5

@aantono 如果您希望能够在 servlet 环境之外使用 jolokia,请在他们的跟踪器中创建一个问题。

0

@snicoll,老实说,我发现纯粹因为 Jolokia 基于 Servlet 实现而不支持 JMX 公开端点有点站不住脚。还支持通用HttpRequestHandler,它不依赖于 Servlet API,自 2010 年以来就可用。AgentServlet主要是使用 ServletAPI 特定的转换来包装调用HttpRequestHandler,从https://github.com/rhuss/jolokia可以明显看出/blob/master/agent/core/src/main/java/org/jolokia/http/AgentServlet.java#L305,可以在 Spring Boot Actuator Endpoint 实现中以相同的方式完成(因此无需附加一个自身到 ServletAPI)。

8

但这不是这里讨论的论点。您询问如何在 WebFlux 应用程序中使用 Jolokia,我们已经指出 Jolokia 不支持它,因此我们对此无能为力,但也许他们可以。首先请向他们提出一个问题,让我们看看进展如何。

2

更详细地查看HttpRequestHandler@aantono 上面引用的类,似乎 Jolokia 已经以无需 servlet 即可工作的方式编写。具体来说,这个 javadoc 似乎表明情况是这样的:

请求处理程序不依赖于 servlet API,因此可以在多种不同的环境中使用

我认为 Jolokia 不太可能提供非阻塞 API。无论如何,这可能是不可能的,因为 JMX 调用可能会被阻止。

在我看来,我们或许能够支持这一点,但这是一项艰巨的工作。我们需要:

  • AgentServlet从该调用中重新创建代码HttpRequestHandler
  • JolokiaEndpoint为不使用 servlet 的 WebFlux创建一个新的
  • 确保在弹性调度程序上执行阻塞调用
6

恐怕目前实施这一点对于我们来说似乎不是一个很好的时间投资。我们当前的 Jolokia servlet 支持只有几行代码,任何 WebFlux 替代方案都需要投入相当多的时间。

我将其保留为开放状态,以防社区中的任何人有兴趣尝试此操作。我不会将其标记为“理想的贡献”,因为我完全期望实现会非常复杂。

5

是否存在使用 WebFlux 公开 JXM beans 的替代方案(与 Jolokia 不同)?

1

我现在使用 Micrometer 和 Prometheus

7

我实现了WebFlux Jolokia 集成的 POC 。可能它并不完整并且有一些缺陷,但它似乎有效。

欢迎提出改进意见和建议。

4

你好,

这是我的 2 美分:

根据 Jolokia 文档,您可以将 jolokia 作为 java 代理运行。该解决方案与“actuator/jolokia”端点方法不兼容,但它适用于任何JVM 进程。您的应用程序甚至不是“Web 应用程序”,因为 Jolokia Agent 方法本身会启动基于 JDK 的 HttpServer。因此,HttpServer可以与反应式服务器共存。

此致