[英]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中 的生存時間
只有針對提到的版本修復它的方法與我們在DynamicJmsTemplate
和DynamicJmsTemplateProperties
所做的類似。
因此,在將消息發送到<int-jms:outbound-channel-adapter>
之前,您需要在ThreadLocal
存儲動態值。 擴展DynamicJmsTemplate
以獲得對覆蓋的getTimeToLive()
方法中提到的ThreadLocal
變量的訪問。 並清理該ThreadLocal
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.