我試圖實現一個mina服務,其中對最終消息的響應應該基於以前的消息。每個消息(頭部(1),數據(n),結束(1))應該接收到一個響應,但是對「結束」消息的響應應該基於「頭部」以及接收到的任何「數據」消息作爲「結束」消息。目前,我將消息路由到一個聚合器,該聚合器在找到特定相關ID的「標題」和「結束」消息時完成。不幸的是,響應在發送給聚合器之前(或同時?)發送,所以我無法訪問聚合消息(其中包含構建正確響應所需的所有數據)建立迴應。在駱駝聚合幾個請求後對MINA請求作出響應
有沒有辦法做到這一點,而無需手動存儲和訪問累積的數據(即,沒有重新實現駱駝的聚合器)?
編輯:
路線是這樣的:
<camelContext>
<route>
<from uri="mina:..."/>
<process ref="messageProcessor"/>
<aggregate>
<process ref="completeMessageProcessor"/>
</aggregate>
</route>
</camelContext>
我離開了一些標籤和屬性(correlationExpression
,completionPredicate
,strategyRef
等)清晰。
郵件正在被合理地收集,並且在「完成」時(即合計時)正在處理它們。但是,通過mina
端點發送回客戶端的響應是由messageProcessor
生成的響應,而不是由completeMessageProcessor
生成的響應。例如(是的,這是一個頗爲人爲的例子,但忍受着我),假設協議涉及客戶端發送一個頭部消息,其中包括它希望發送的數據消息的總數。然後它發送一些數據消息,這些消息的數量可能與預期發送的數量不同。最後,它發送一個頁腳或結束消息。然後服務器應該回應預期的消息數量和消息的實際數量之間的差異。對於寫入的路由,這是不可能的,因爲消息的數量不被messageProcessor
所知,其僅處理單個消息。 completeMessageProcessor
,具有彙總的消息(由標題,所有數據和結尾組成)確實知道這個數字,但在那一點產生的響應不會傳回到mina
端點。
僅當收到整個撰寫郵件時才更改消息的分析以生成消息,因爲服務器必須響應各個消息,所以不是一種選擇。
發表您的路線...不知道你所說的「迴應的意思被髮送之前(或同時?)郵件發送到聚合器...「 – 2012-08-09 04:12:43