2015-02-09 3 views
1

Мне нужно настроить время жизни для моих сообщений.Установка времени для сообщений в Spring Integration

Я попробовал следующий пример, но время жизни будет проигнорировано. :/

context.xml

<int:channel id="publishChannel"/> 

<int-jms:outbound-channel-adapter 
     channel="publishChannel" 
     destination="defaultDestination" 
     time-to-live="5000" 
     pub-sub-domain="false" /> 

Издательство

import org.springframework.integration.annotation.Publisher; 
import org.springframework.messaging.Message; 
import org.springframework.messaging.MessageChannel; 
import org.springframework.stereotype.Service; 

@Service("publishService") 
public class PublishService{ 
    private MessageChannel messageChannel; 

    @Publisher(channel = "publishChannel") 
    public Message<?> sendMessage (Message<?> message) { 
     return message; 
    } 
} 

Я надеюсь, что кто-то может мне помочь! :)

ответ

4

По JmsTemplate JavaDocs мы имеем:

/** 
* Set the time-to-live of the message when sending. 
* <p>Since a default value may be defined administratively, 
* this is only used when "isExplicitQosEnabled" equals "true". 
* @param timeToLive the message's lifetime (in milliseconds) 
* @see #isExplicitQosEnabled 
* @see javax.jms.Message#DEFAULT_TIME_TO_LIVE 
* @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long) 
*/ 
public void setTimeToLive(long timeToLive) { 
    this.timeToLive = timeToLive; 
} 

Таким образом, это не работает, если explicitQosEnabled не true (JmsTemplate#doSend):

if (isExplicitQosEnabled()) { 
    producer.send(message, getDeliveryMode(), getPriority(), getTimeToLive()); 
} 

Следовательно, вы должны добавить explicit-qos-enabled="true" наряду с time-to-live="5000" для вашего <int-jms:outbound-channel-adapter>.

+0

спасибо ... это работает :) – Smoothi

Смежные вопросы