2014-12-23 21 views
0

爲了測試目的,我需要閱讀正在飛行的消息並刪除正在飛行的消息。我無法找到一個合適的解決方案,所以我用身邊工作方式現在如何閱讀航班狀態中的消息並通過boto庫刪除它

閱讀航班信息 1.停止消息消費過程 2.等待消息,請閱讀它,但不能刪除 3.啓動消息消費過程

刪除在飛行中消息(儘量明確(),但它只是刪除可用的消息) 1.刪除隊列 2.重新創建隊列

任何更好的解決方案?

+1

你能解釋一下你爲什麼要這樣做嗎?看起來你正試圖對付SQS設計,所有你提出的解決方法都是重量級的。 –

+1

您無法刪除隊列以刪除一條消息。您將丟失所有其他正在等待的消息,並會在其他消息生產者/消費者應用程序的基礎上導致錯誤。這就像刪除一個數據庫來刪除一條記錄 –

+1

你對飛行中的消息的定義有正確的理解嗎?它們是您的消費者已收到的消息,但SQS沒有看到消費者隨後發出的任何有效請求來刪除它們或以其他方式修改其可見性。他們*通過設計*無法訪問。 –

回答

0

除非從消費者身上刪除/查看消息,否則無法查看或刪除正在飛行的消息。

當消費者請求消息時,消息變爲'正在運行',因此如果您想要刪除消息,只要消息首先請求消息的消費者就可以。

它不完全清楚你想要完成什麼,如果你對最終目標給出了更好的解釋,也許有人可以提出更好的解決方案。

順便說一句,如果您想一次刪除隊列中的消息,則不再需要刪除隊列 - 上個月剛剛發佈了一個新的「清除隊列」選項 - 如果這有助於你的解決方案

http://docs.aws.amazon.com/cli/latest/reference/sqs/purge-queue.html

+0

我的最終目標是我的測試腳本需要驗證以sqs爲單位的消息是否正確。但是在我讀取它來驗證之前,可能它已經被消費者閱讀了。所以我的問題是,如果不幸的是它已經被消費者閱讀並且正在飛行,那麼我的測試腳本是否仍然可以讀取它以用於驗證目的。至於在飛行模式下刪除消息,這是因爲我需要確保sqs在單元測試設置功能中是乾淨的。 –

+0

如果您需要驗證消息流,請考慮使用SNS將相同的消息流扇出到雙重隊列 - 一個專門用於測試/驗證的隊列,另一個由實際使用者使用。 –

相關問題