gpt4 book ai didi

java - 带有 JMS 2.0 的 Spring 4 CachingConnectionFactory 不能正确缓存生产者

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:24 25 4
gpt4 key购买 nike

我们刚刚升级到 Spring 4 和 JMS 2.0。我们正在使用 CachingConnectionFactoryJmsTemplate 发布消息,并注意到在发布到目的地时,第一次尝试有效,然后进一步尝试发布到同一目的地会导致以下异常:

Caused by: javax.jms.IllegalStateException: The producer is closed

在 Spring 3.2 和 JMS 1.1 上一切正常,所以我进行了一些挖掘以查看问题所在,看来问题出在 CachedMessageProducer 类中。通常,此类会重新实现 MessageProducer 接口(interface)中的所有方法。特别是有一个 close() 方法,它被重新实现并且只会重置属性,但在使用 JmsTemplate< 发送消息后保持生产者 Activity (因为它是一个缓存工厂)/.

但是,在 Spring 4 中有一个名为 getProxyIfNecessary 的新方法,它确定是否正在使用 JMS 2.0,当它检测到 JMS 2.0 时,它会创建一个 Jms2MessageProducerInvocationHandler 代理.此代理的 invoke 方法将所有调用委托(delegate)给原始 MessageProducer 对象,似乎绕过了 CachedMessageProducer 中的方法调用。最终结果是在原始 MessageProducer 对象上调用了 close 方法(我们不想要它,因为它应该被缓存)。这意味着 future 的发布尝试给出了生产者已关闭的异常(exception)。

有没有人遇到过这个问题?我不确定我是否做错了什么,或者这是 Spring 中新的 JMS 2.0 支持的错误。

最佳答案

就像您自己发现的那样,这确实是一个错误,并且在即将发布的 4.0.64.1.RC1 中得到了解决。谢谢!

关于java - 带有 JMS 2.0 的 Spring 4 CachingConnectionFactory 不能正确缓存生产者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com