[spring-projects/spring-boot]通过提供 EndpointObjectNameFactory bean 允许自定义 JMX 端点 ObjectNames

2024-07-08 976 views
1

只是好奇,并提出友好的建议和请求。

如果可以的话,可以通过 HTTP 更改端点的名称

management.endpoints.web.path-mapping.info=information
management.endpoints.web.path-mapping.health=salud

为什么不为 JMX 提供同样的方法呢?例如:

management.endpoints.jmx.mbean.info=information
management.endpoints.jmx.mbean.health=salud

我知道这并不重要,但因为它可以通过 Web 获得。为什么不让开发人员或监督人员选择让 HTTP 和 JMX 保持相同的名称呢?

感谢你的理解

回答

7

我们允许在使用 HTTP 时更改端点路径,原因如下:

  1. 将路径与通用监控解决方案的要求相匹配
  2. 配置基本路径时,为了/避免与应用程序自己的端点之一发生冲突

org.springframework.boot当使用 JMX 时,我认为这两种需求都不存在。MBean 特定于 Spring Boot,因此查询它们的任何监控工具也必须在某种程度上特定于 Spring Boot。由于 MBean 是随域发布的,因此也不可能发生冲突。

我们通常希望使用 JMX 或 HTTP 来监控应用程序,因此没有考虑过两者之间需要一致的命名。您是否特别需要它们能够匹配?

8

嗨@wilkinsona

没有特别关键的原因,但在某些不寻常的情况下,如果我们有两个监督同时在 http 和 jmx 中工作,并且每个监督都通过不同的分支/选项,并且通过远程,它们将需要协调以基于相同的名称访问相同的端点。

当然,这并不是至关重要的,但是一种有效的情况,虽然不常见,但会发生。

我知道,这只是一个微不足道的要求。

如果你愿意,请继续关闭此问题。

7

谢谢,@manueljordan。

我们有一个EndpointObjectNameFactory策略接口,用于ObjectName为每个端点 MBean 创建。但是,我们不允许您提供自己的实现。我不确定这是否是一个足够常见的要求,我们应该为其提供配置属性,但允许将EndpointObjectNameFactory作为 bean 提供只是一个小小的改变。让我们看看团队的其他成员怎么想。

2

听起来很棒@wilkinsona!

另一个原因是,当一个聪明的项目经理想要所有的终端都使用西班牙语——或者法语、葡萄牙语时

我认为关键在于采用这种方法来带来灵活性...我知道这并不重要,虽然微不足道,但在某些时候可能是一个要求。

2

公开一种自定义方法EndpointObjectNameFactory对我来说听起来不错。但是,我想知道如果不公开的话,这种方法是否实用DefaultEndpointObjectNameFactory

7

DefaultEndpointObjectNameFactory我们可以通过消耗的属性来公开它吗?

9

定义具体部分的属性?ObjectName 相当复杂,所以我不确定是否需要在属性中使用它。

3

哦,我以为我们只想让name部分可配置。但也许我误解了这个问题。

8

感谢您的确认。这正是我怀疑您所指的。在我看来,如果我们提供一种自定义方法,我们应该针对对象名称,而不是对象名称的一部分。

2

我们将创建EndpointObjectNameFactory一个您可以自行添加的 bean。我们不会公开,DefaultEndpointObjectNameFactory因为我们认为重命名 JMX bean 通常不是一个好主意(例如,IDE 工具通常需要特定名称)。

7

我们认为重命名 JMX bean 不是一个好主意(例如,IDE 工具通常需要特定的名称)

它与由同一 Java 应用程序创建的任何域有关,对吗?如果我说得不正确,请稍微扩展一下这个想法。

原始帖子的目的是仅编辑或重命名org.springframework.boot域内可用的任何 MBean。更改同一应用程序中可用的其他域毫无意义

8

IDE 工具使用 Actuator 提供的 MBean 来显示有关您的应用的信息。如果您重命名它们,该工具将会崩溃。

4

我现在明白了,谢谢你的澄清,为什么不使用一种别名?保留 IDE 的原始名称(没有中断)并应用别名(通过特殊注释)并将标志设置为 true 以启用识别该注释,通过在 中定义的属性application.properties,让 JConsole/VisualVM 使用该替代/别名值。

6

@manueljordan 我们已经描述了我们的计划,请参阅上面的评论。由于我们认为重命名 JMX bean 不是一个好主意,因此我们不会为其提供这种一流的支持。

3

你好@snicoll - 是的,这只是一个想法。就这些,我明白了