代码之家  ›  专栏  ›  技术社区  ›  Smoothi

设置Spring集成中消息的生存时间

  •  3
  • Smoothi  · 技术社区  · 10 年前

    我需要设定一个时间来实现我的信息。

    我尝试了以下示例,但生存时间将被忽略/

    上下文.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;
        }
    }
    

    我希望有人能帮助我!:)

    1 回复  |  直到 10 年前
        1
  •  6
  •   Artem Bilan    10 年前

    相符合的 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> .