JMS receiveTimeout 属性spring.jms.template.receive-timeout
不会从配置属性传播到创建的 JMS 侦听器中。这迫使应用程序代码显式设置它 - 我们发现应用程序很少这样做,并且默认值在某些环境中对性能不利。
这个小更改将外部配置复制到侦听器中。
(我听说现在有一个企业 CLA 可以让这一点被接受。)
JMS receiveTimeout 属性spring.jms.template.receive-timeout
不会从配置属性传播到创建的 JMS 侦听器中。这迫使应用程序代码显式设置它 - 我们发现应用程序很少这样做,并且默认值在某些环境中对性能不利。
这个小更改将外部配置复制到侦听器中。
(我听说现在有一个企业 CLA 可以让这一点被接受。)
感谢您的建议。
鉴于我们对模板和侦听器有单独的属性,用户可能会惊讶于某个spring.jms.template.*
属性影响了侦听器的配置。我认为我们应该考虑几个替代方案:
spring.jms.listener.receive-timeout
属性spring.jms.template.receive-timeout
并添加spring.jms.receive-timeout
在模板和侦听器上配置接收超时1 提供了更大的灵活性,而 2 则更容易保持两者同步。我对哪个是更好的选择没有强烈的意见,尽管我倾向于 1。你觉得怎么样,@ibmmqmet。 @snicoll 回到办公室后可能也会有意见。
该模板似乎被用于相当多的其他属性,但不清楚真正的区别是什么 - 它确实在 JMSProperties.Template 类中具有 receiveTimeout 属性,该属性在我能看到的其他地方没有使用 - 所以这样做这种方式是有道理的。否则,在班级中拥有该财产有什么意义呢?它可以配置到模板中,只是不传播。也许存在一种关于什么属于“模板”以及什么属于“真实”创建的对象的哲学。
我不知道为什么您会以不同于默认属性的目标/连接的方式对待 JMS 侦听器,但如果有一种首选方法,那么我并不关心。
在您的两个选项中(1)可能是最容易理解的。
spring.jms.template
属性用于配置JmsTemplate
由以下方法创建的 bean JmsAutoConfiguration
:
它可以配置到模板中,只是不传播。也许存在一种关于什么属于“模板”以及什么属于“真实”创建的对象的哲学。
听起来您似乎不知道 Spring FrameworkJmsTemplate
简化了使用 JMS 的代码。这就是template
属性名称中的 the 所指的内容。JmsTemplate
由自动配置创建并使用属性配置的对象是spring.jms.template.*
一个真实的对象,并作为 bean 暴露给应用程序。另一方面,这些spring.jms.listener
属性用于配置由 JMS 自动配置创建的消息侦听器容器。
简而言之:
JmsTemplate
控制接收消息的超时JmsTemplate
鉴于上述情况,您仍然倾向于我提出的两个选项中的第一个吗?
要将您的 GitHub 帐户与 IBM 的企业 CLA 关联,它需要是IBM或OpenLiberty GitHub 组织的公共成员。CLA 工具的常见问题解答中对此有更多介绍。
是的,(1)中的单独属性可以工作。
您想更新您的提案吗?
@ibmmqmet 感谢您的更新。您能否进行必要的更改以使您的 GitHub 帐户与 IBM 的 CLA 相关联?
@ibmmqmet 我们可以得到一些反馈吗?
抱歉耽搁了——其他项目和离开我的办公桌妨碍了......
我已经添加了所要求的评论。但无法将函数添加到测试文件中,因为 org.springframework.jms.listener.AbstractPollingMessageListenerContainer#getReceiveTimeout() 方法被标记为“受保护”(没有明显原因),因此无法直接访问。
感谢您的更新。
方法被标记为“受保护”(没有明显的原因),因此无法直接访问。
它被标记protected
为限制公共 API 的表面积。
当我们想要测试不可公开访问的东西的价值时,我们通常使用反射。 AssertJhasFieldOrPropertyWithValue
提供了一种方法来做到这一点。在一些测试中有一些它的用法示例JmsAutoConfigurationTests
。这是一个:
您能否使用这种方法来测试新的接收超时属性?
除了缺少测试之外,不幸的是,由于 CLA 检查失败,我们也无法合并它。我们目前的理解是,您的 IBM 或 OpenLiberty GitHub 组织成员资格需要公开。
感谢您的更新。有CLA的消息吗?
不幸的是,如果这拖得太久,我们将不得不关闭 PR,因为监视它的开销开始超过更改的好处。
CLA 好像已经签了
@ibmmqmet 感谢您签署贡献者许可协议!
非常感谢 @ibmmqmet 对 Spring Boot 做出的第一个贡献。我很高兴我们最终成功实现了这一目标。