簡體   English   中英

在Spring集成中將動態值設置為生存時間

[英]Setting dynamic value to time-to-live in Spring integration

我們有來自上游的帶有到期時間戳的消息。 這些消息將被處理並有生存時間發送到下游

對於各種類型的消息,我們收到不同的到期時間戳記,因此對於服務激活器中的每種消息類型,分別計算生存時間,並將其設置為出站消息頭有效載荷,如下所示:

MessageBuilder.fromMessage(requestMessage).
setHeader("header1",header1).
setHeader("header2",header2).
setHeader("timeToLive",timeToLive).
setHeader("header3",header3).build();

現在,我們正在使用以下方式發布此消息:

<int-jms:outbound-channel-adapter id="publishMessage" channel="publishMessageChannel" header-mapper="headerMapper"
                                     pub-sub-domain="${is.topic}"
                                     destination-name="${outbound.queue}" connection-factory="outputConnectionFactory" order="1" explicit-qos-enabled="true" time-to-live="headers['timeToLive']">
    <int-jms:request-handler-advice-chain>
        <ref bean="retryAdvice" />
    </int-jms:request-handler-advice-chain>    

上面的方法拋出以下異常,因為生存時間設置為僅接受數字

原因:org.springframework.beans.TypeMismatchException:無法將類型“ java.lang.String”的屬性值轉換為屬性“ timeToLive”的必需類型“ long”; 嵌套的異常是java.lang.NumberFormatException:對於輸入字符串:“'headers ['timeToLive']'

我們使用的是SI版本4.3,因此無法使用更高版本上的生存時間表達式

需要找到一種方法,將豐富的標頭中的timeToLive值設置為int-jms:outbound-channel-adapter中 的生存時間

只有針對提到的版本修復它的方法與我們在DynamicJmsTemplateDynamicJmsTemplateProperties所做的類似。

因此,在將消息發送到<int-jms:outbound-channel-adapter>之前,您需要在ThreadLocal存儲動態值。 擴展DynamicJmsTemplate以獲得對覆蓋的getTimeToLive()方法中提到的ThreadLocal變量的訪問。 並清理該ThreadLocal值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM