簡體   English   中英

Apache Camel-根據正文聚合消息

[英]Apache Camel - aggregate messages based on body

我目前正在使用apache駱駝來消費SQS消息,並且一切正常。

作為一個項目的一部分,我在上載文件時使用S3通知事件。 文件被上傳到可預測的S3密鑰- (<type>/<account-id>/<id>/<file>)

處理時,我使用駱駝將消息聚合到一個交換中(等待10條消息,或者1秒后超時)。 我在想,但是,有沒有一種方法可以基於S3進行聚合-例如,聚合具有相同類型或ID的消息。

據我閱讀駱駝文檔了解,有一些方法可以查詢Json負載或標頭值-這是一種可行的方法(因為S3事件通知是Json消息,並且根據AWS文檔,PUT操作只會生成一個單條記錄)? 還是我需要實現自己的聚合器?

要添加一點上下文-我有一個收集數據並將數據上傳到S3的服務。 然后,另一服務將在收到通知后下載此數據,進行處理並將其上傳到另一個存儲桶。 如果我可以匯總S3通知,則可以合並數據並上傳,減少上傳和API調用等操作的數量。

如果您使用camel-aws s3組件,則可以從消息的CamelAwsS3Key標頭訪問/獲取S3鍵,並且不需要查詢正文,但是需要從S3鍵中提取必填字段。

雖然不是最佳或最通用的解決方案,但我確實找到了使此工作正常進行的方法-

我只是添加了一個額外的處理器,該處理器在傳遞給聚合器之前被調用。 處理器只需為S3鍵檢查事件記錄(因為我正在偵聽來自S3的PUT事件,根據AWS文檔應該只有一條記錄),然后在Message上設置標頭。

然后,聚合器便可以基於這些標頭(簡單地為S3-TypeS3-Account-IdS3-Id )合並Exchange。

暫無
暫無

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

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