如何在@JmsListener 发送的消息上设置生存时间 (TTL)
How Can I set the time-to-live (TTL) on a message sent by @JmsListener
我在我的应用程序中使用来自 spring-jms 4.1.6 的 @JmsListener,我想为发送到 JMSReplyTo 字段的响应设置 TTL。我很难尝试轻松地做到这一点。我是 spring-jms 的新手,所以我想我可能忽略了一些东西。
要设置 TTL,我必须
- 创建一个 CustomJmsListenerAnnotationBeanProcessor,
- 它为每个带注释的方法创建一个 CustomMethodJmsListenerEndpoint,
- 它覆盖了 createMessageListenerInstance
- 创建 CustomMessagingMessageListenerAdapter
如下覆盖 postProcessProducer:
protected void postProcessProducer(MessageProducer, Message response) throws JMSException {
super.postProcessProducer(producer, response);
producer.setTimeToLive(10000);
}
好的。所以这一切看起来很疯狂,尤其是因为 postProcessProducer 的按钮非常好,而且因为 MessagingMessageListenerAdapter 有一个工厂方法。似乎此方法旨在被拦截和覆盖。这让我想到了我的问题:
- 似乎在响应上设置 TTL 是一件很常见的事情,所以无数的重写来做这件事似乎是错误的。我是否忽略了一种更简单的方法来设置响应的 TTL?
- 我是否忽略了一种更简单的方法来注入 MessagingMessageListenerAdapter 子级,因为它看起来应该被覆盖?
感谢您的帮助!
你的做法是正确的。他们还实现了对它的支持:
https://jira.spring.io/browse/SPR-13774
所以现在您可以扩展 CustomJmsListenerAnnotationBeanProcessor
而无需处理整个 class。
我在我的应用程序中使用来自 spring-jms 4.1.6 的 @JmsListener,我想为发送到 JMSReplyTo 字段的响应设置 TTL。我很难尝试轻松地做到这一点。我是 spring-jms 的新手,所以我想我可能忽略了一些东西。
要设置 TTL,我必须
- 创建一个 CustomJmsListenerAnnotationBeanProcessor,
- 它为每个带注释的方法创建一个 CustomMethodJmsListenerEndpoint,
- 它覆盖了 createMessageListenerInstance
- 创建 CustomMessagingMessageListenerAdapter
如下覆盖 postProcessProducer:
protected void postProcessProducer(MessageProducer, Message response) throws JMSException { super.postProcessProducer(producer, response); producer.setTimeToLive(10000); }
好的。所以这一切看起来很疯狂,尤其是因为 postProcessProducer 的按钮非常好,而且因为 MessagingMessageListenerAdapter 有一个工厂方法。似乎此方法旨在被拦截和覆盖。这让我想到了我的问题:
- 似乎在响应上设置 TTL 是一件很常见的事情,所以无数的重写来做这件事似乎是错误的。我是否忽略了一种更简单的方法来设置响应的 TTL?
- 我是否忽略了一种更简单的方法来注入 MessagingMessageListenerAdapter 子级,因为它看起来应该被覆盖?
感谢您的帮助!
你的做法是正确的。他们还实现了对它的支持: https://jira.spring.io/browse/SPR-13774
所以现在您可以扩展 CustomJmsListenerAnnotationBeanProcessor
而无需处理整个 class。