- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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 之一上执行此操作(例如 JmsListenerContainerFactory
或 ConnectionFactory
)。
编辑:不幸的是,我们正在使用 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/
我正在使用 Spring JMS,并有一个 @JmsListener 带注释的方法来处理传入消息并响应它们。 问题是我需要将交付模式设置为 NON_PERSISTENT 并且使用的 IBM MQ 库的
我是一名优秀的程序员,十分优秀!