Spring integration 如何在Spring集成出站适配器中为Artemis Broker的JmsMessage添加延迟
我有一个jms出站通道适配器。我想向我的ApacheArtemis代理发送一条消息,并添加一个延迟Spring integration 如何在Spring集成出站适配器中为Artemis Broker的JmsMessage添加延迟,spring-integration,activemq-artemis,Spring Integration,Activemq Artemis,我有一个jms出站通道适配器。我想向我的ApacheArtemis代理发送一条消息,并添加一个延迟 <int-jms:outbound-channel-adapter connection-factory="scheduledConnectionFactory" channel="tnpScheduledOutboundChannel" destination="tnpScheduledQueue" /> 该头作为spri
<int-jms:outbound-channel-adapter connection-factory="scheduledConnectionFactory" channel="tnpScheduledOutboundChannel" destination="tnpScheduledQueue" />
该头作为spring集成头添加。但是它并没有被JMS拾取,即队列的消费者立即看到它
我需要添加某种JmsHeaderMapper吗?有人能指出一些文档或例子吗
更新
这是调试时在JmsSendingMessageHandler中捕获的消息
ActiveMQMessage[null]:PERSISTENT/ClientMessageImpl[messageID=0, durable=true, address=null,userID=null,properties=TypedProperties[sequenceNumber=4,file_status=0,sequenceSize=0,_AMQ_SCHED_DELIVERY=14685858,timestamp=1605707114145,correlationId=4d6fa6c8-fdcb-d69b-cd60-d260264545f5]]
如果我直接在激活器中使用jmsTemplate
public void sendDelayMessage(SdpInfoTemplate<?> message, long deliveryDelay, String queue) {
jmsTemplateDelay.setDeliveryDelay(deliveryDelay);
jmsTemplateDelay.setDeliveryMode(DeliveryMode.PERSISTENT);
jmsTemplateDelay.convertAndSend("sdp-file-tnp-scheduled-dimitris-test", message, m -> {
m.setLongProperty("_AMQ_SCHED_DELIVERY", deliveryDelay);
m.setStringProperty("TRANSACTION_ID",message.getTransactionId());
return m;
});
public void sendDelayMessage(SdpInfoTemplate消息、长deliveryDelay、字符串队列){
setDeliveryDelay(deliveryDelay);
setDeliveryMode(DeliveryMode.PERSISTENT);
jmsTemplateDelay.convertAndSend(“sdp文件tnp计划的dimitris测试”),消息,m->{
m、 setLongProperty(“_AMQ_SCHED_DELIVERY”,deliveryDelay);
m、 setStringProperty(“TRANSACTION_ID”,message.getTransactionId());
返回m;
});
关键部分是jmsTemplateDelay.setDeliveryDelay(deliveryDelay);
如果我不设置此选项,它将被计划忽略,并且使用者端会立即拾取消息默认情况下,
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
private static final list我已经更新了我的答案,我似乎没有丢失标题。另外,如果我直接使用jmsTemlpate,并且我没有jmsTemplateDelay.setDeliveryDelay(deliveryDelay)
消息立即发送请在我的回答中查看更新。以毫秒为单位的时间计算是错误的,我只传递了差值,没有必要添加setDeliveryDelay,这归结为\u AMQ\u SCHED\u DELIVERY
本身
private static final List<Class<?>> SUPPORTED_PROPERTY_TYPES = Arrays.asList(new Class<?>[] {
Boolean.class, Byte.class, Double.class, Float.class