如何在Spring Integration Outbound Adapter中为Artemis Broker的JmsMessage添加延迟

问题描述 投票:0回答:2
spring-integration activemq-artemis
2个回答
0
投票

默认情况下,在

DefaultJmsHeaderMapper
中使用
JmsSendingMessageHandler
。如果值属于支持的类型,它将所有标头映射到
jmsMessage.setObjectProperty(propertyName, value);

private static final List<Class<?>> SUPPORTED_PROPERTY_TYPES = Arrays.asList(new Class<?>[] {
        Boolean.class, Byte.class, Double.class, Float.class

或者你在中间的某个地方丢失了标题......

更新

抱歉,您让我们感到困惑。您的

_AMQ_SCHED_DELIVERY
确实作为最终 JMS 消息中的属性存在。当你谈论
setDeliveryDelay()
时,这是完全不同的故事。

您可以做的就是扩展

DynamicJmsTemplate
。覆盖其
getDeliveryDelay()
并从您填充的
ThreadLocal
中获取所需的值,然后再向该
<int-jms:outbound-channel-adapter>
发送消息。

这是我们绝对可以添加到

DynamicJmsTemplate
DynamicJmsTemplateProperties
中以通过上述
JmsSendingMessageHandler
解决的问题。但目前的解决方法仅为此
ThreadLocal
选项实现您自己的
deliveryDelay
变量。


0
投票

对于此设置(Spring Integration + Artemis),如果您想延迟向消费者传递消息,您可以这样做

.setHeader(Message.HDR_SCHEDULED_DELIVERY_TIME.toString(), System.currentTimeMillis() + {yourDelayInMs})

关键点是您应该设置从纪元开始的以毫秒为单位的交付时间,而不是实际的延迟值。

© www.soinside.com 2019 - 2024. All rights reserved.