gpt4 book ai didi

java - 设置 Spring JmsListener 的 DeliveryMode

转载 作者:行者123 更新时间:2023-12-02 11:12:29 26 4
gpt4 key购买 nike

我正在使用 Spring JMS,并有一个 @JmsListener 带注释的方法来处理传入消息并响应它们。

问题是我需要将交付模式设置为 NON_PERSISTENT 并且使用的 IBM MQ 库的默认值是 PERSISTENT ,只能在调用 (内部)send 方法。

在 stackoverflow 上的另一个问题中,提到可以设置 JmsTemplate 的传递模式,但不幸的是该模板不用于 @JmsListener带注释的方法。

调试后,我发现 MessagingMessageListenerAdapter 有一个 postProcessProducer 方法,我可以覆盖该方法以手动更改创建的 MessageProducer 的设置。不幸的是,扩展这个类并让 spring 使用它是相当复杂的。我让它工作了,但我怀疑这是最好的解决方案,并且将其设置到位,这会将我所有 @JmsListener 方法的传递模式设置为 NON_PERSISTENT (还不是对我来说是个问题,但也许是将来):

// bean definition in my @Configuration class:

@Bean(name = JmsListenerConfigUtils.JMS_LISTENER_ANNOTATION_PROCESSOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public JmsListenerAnnotationBeanPostProcessor jmsListenerAnnotationProcessor() {
return new JmsListenerAnnotationBeanPostProcessor() {
@Override
protected MethodJmsListenerEndpoint createMethodJmsListenerEndpoint() {
return new MethodJmsListenerEndpoint() {

@Override
protected MessagingMessageListenerAdapter createMessageListenerInstance() {
return new MessagingMessageListenerAdapter() {

@Override
protected void postProcessProducer(MessageProducer producer, Message response)
throws JMSException {
super.postProcessProducer(producer, response);

producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
}

};
}

};
}
};
}

当我使用@JmsListener时,是否有更简单的方法来设置传递模式?我发现了很多可以设置交付模式的类,但我还没有找到任何方法可以在我必须定义才能运行 JMS 设置的 bean 之一上执行此操作(例如 JmsListenerContainerFactoryConnectionFactory)。

编辑:不幸的是,我们正在使用 Spring 4.x,无法更新到 5.x

最佳答案

在 Spring 5(当前为 5.0.6)中,您现在可以在容器工厂的 responseQosSettings 属性中设置 QosSettings 对象 docs here ;向下滚动一点。

Finally if you need to specify some QoS values for the response such as the priority or the time to live, you can configure the JmsListenerContainerFactory accordingly:

public class QosSettings {

private int deliveryMode;

private int priority;

private long timeToLive;

...

}

关于java - 设置 Spring JmsListener 的 DeliveryMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50527388/

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