[spring-projects/spring-boot]使用执行器公开 Spring Integration 图

2024-04-23 676 views
6

基于@michael-simons(阅读这篇文章)的想法,此 PR 将添加通过 JMX、Jersey、Spring MVC 和 WebFlux 公开 Spring Integration 图的功能。

注意:目前@since 2.1.0在 Javadoc 中提到。

回答

0

@garyrussell @artembilan 你觉得怎么样?

7

我都可以; SI目前仅支持MVC和WebFlux。谢谢蒂姆!

IntegrationGraphServer我唯一的问题是,当执行器启用时,我们是否应该默认自动配置。

这似乎取决于豆子的存在;如果从未被引用,则开销很小。

6

@garyrussell @artembilan 我也这么想。我应该把以下内容放在下面吗IntegrationAutoConfiguration.IntegrationConfiguration

@ConditionalOnMissingBean
@Bean
public IntegrationGraphServer integrationGraphServer() {
    return new IntegrationGraphServer();
}

这个公关是这样做的正确人选吗?我假设您希望将其向后移植到 1.x(如果可能的话)?

6

IMO 那是这样做的正确地点。我不认为我们会向后移植它。该主题没有错误,并且总有一种解决方法可以使用现有工具和挂钩来完成相同的任务。

8

@artembilan @garyrussell 最后的添加已被推送。如果一切顺利的话我想这个 PR 可以标记为 2.1.0 吗?如果您需要我改变一些事情,请告诉我!

5

@TYsewyn,我们将在适当的时候审查并为此指定一个里程碑。谢谢!

6

我对这个进行了广泛的研究,并用我自己的叉子进行了打磨。我不喜欢 anIntegrationGraphServer作为主要自动配置的一部分而创建的事实。这是一个管理问题,所以根本不应该存在。

我试图以端点未启用为条件,但没有简单的方法可以做到这一点,因为它@ConditionalOnEnabledEndpoint仅适用于特定类型。也许我们应该重新审视一下这个问题。

另外我不明白为什么默认情况下禁用端点。这真的是我们想要的吗?

3

我最初也有同样的想法,斯蒂芬。是的,这IntegrationGraphServer是一个管理问题,但从另一方面来说,它存在于core模块中,并且是一个尽可能简单的无源元件。所以,最后我决定在主自动配置中再保留一个 bean 不会有什么坏处。

如果这仍然是一个问题,那么让我们考虑从一些执行器自动配置中实例化它!问题是它是一个独立的组件,即使提到的端点被禁用也可以使用。

+1 不会使端点默认禁用。在审查过程中不知何故错过了那部分......对此事有任何解释吗,@TYsewyn?

谢谢

2

感谢您的反馈。

它是一个尽可能简单的无源元件

我不确定我是否同意这一点。一旦上下文刷新,就有一个事件监听器将构建图表。如果您不使用执行器,我认为没有理由运行它。如果您需要此功能,您可以定义 bean(就像您现在可能所做的那样)。

问题是它是一个独立的组件,即使提到的端点被禁用也可以使用。

这很好,但在我看来,提供这个(只有端点会使用)和在需要端点时提供这个是有区别的。我更喜欢后者,但不幸的是,这并不容易实现。

+1 不会使端点默认禁用。

我已经在我的波兰提交中改变了这一点

6

斯蒂芬,

我认为我们很高兴与您一起完善:您已经解决了所有问题! :+1:

2

我禁用了端点,因为自动配置中不存在IntegrationGraphServerbean,因此默认情况下引导该端点没有任何意义。我们后来添加了一个,但我在添加 bean 时忘记默认打开它。

4

你已经解决了所有的问题

我没想到。我希望IntegrationGraphServer如果端点被禁用或 Spring Integration 未启用,则根本不会创建。

@artembilan 我怎么知道项目上启用了 SI?我可以寻找一种典型的豆子吗?

2

@斯尼科尔,

我认为您可以IntegrationGraphServer在启用端点时有条件地创建。另一方面,我们的主要IntegrationAutoConfiguration依赖于@ConditionalOnClass(EnableIntegration.class).也许这在这里也足够了?如果故事仍然是关于排除的IntegrationAutoConfiguration,那么我们可以考虑针对 bean 的一个条件IntegrationContextUtils.INTEGRATION_HEADER_CHANNEL_REGISTRY_BEAN_NAME,它是 的一种类型DefaultHeaderChannelRegistry。那是由 that 注册的其中之一@EnableIntegration

希望有帮助。

8

感谢您的反馈@artembilan

我认为您可以在启用端点时有条件地创建 IntegrationGraphServer 。

实际上我现在不能,所以如果你想实现这一点,我们就必须改变条件。

2

我创建了 #12945 来改善这种情况。如果合并,我可以防止IntegrationGraphServer在端点被禁用时创建。

0

@TYsewyn 现在已合并到master.多谢!

7

感谢大家的宝贵反馈!