2014-08-28 49 views
2

在Mule ESB中,我試圖通過foreach循環轉發自定義HTTP頭,而不將數據存儲在會話變量中。如何通過foreach mule循環來優雅地保留HTTP頭文件?

關於我的使用案例:我有20個不同的流量,包含HTTP入站和2到5個HTTP出站。我正在嘗試將大約10個HTTP頭從入站轉發到所有出站。

我試圖把入站變量複製到出站變量

<flow name="add_http_headers" doc:name="add headers"> 
    <message-properties-transformer scope="outbound"> 
     <add-message-property value="#[message.inboundProperties.X-HeaderName1]" key="X-HeaderName1"/> 
    </message-properties-transformer> 
</flow> 

它正常工作,除了在一種情況下的私人流程:在HTTP出口標籤是在換每個標籤:換將每個創建一個新的上下文。出站和入站變量不再可訪問。但我仍然可以訪問會話變量。

所以我有一個補丁,但我不喜歡它: 之前我脫穎而出,每個我改變我所有的頭在會話變量

<message-properties-transformer scope="session" > 
    <add-message-property value="#[message.inboundProperties.X-HeaderName1]" key="X-HeaderName1"/> 
</message-properties-transformer> 

然後在我的for-each標籤我重新轉換的會話在出站變量變量:

<message-properties-transformer scope="outbound" > 
    <add-message-property value="#[sessionVars.X-defaultDistributor]" key="X-defaultDistributor"/> 
</message-properties-transformer> 

它的工作原理,但我有很多重複的,是有限制複製和轉發的HTTP頭,即使在創建新的騾子上下文的方法嗎?

回答

0

您可以使用流程圖。 將所有內容放入會話變量中並不是一個好主意,因爲Mule會將它傳遞給後續流和虛擬機。它甚至將它作爲序列化變量附加到http頭上。所以如果你的會話變得太大,你可能會遇到一些服務不接受你的http請求的問題,因爲頭太大。 您總是需要取消設置會話變量。有時你無法避免它,但通常我更喜歡流程。 flowvar的範圍限於流量或子流量。因此,您不需要考慮取消設置或副作用,因爲變量會跨越整個應用程序,通過每個VM和流或Mule嘗試將其序列化。

所以我最好的猜測是:使用流量。

相關問題