這可能是一個愚蠢的問題,但我現在有一個很大的心理障礙。我看不到我的SQS隊列和將處理消息的EC2實例之間的連接。在亞馬遜上處理郵件
也就是說:客戶端完成網頁上的表單(此網頁託管在EC2實例中),並將該表單作爲消息發送到SQS隊列。之後,我的雲應用程序的目標是獲取消息的表單信息並使用該信息運行.sh。這個過程的一個例子顯示,在未來的畫面:
那麼,怎樣才能我的SQS隊列運行在EC2實例.SH?我想通過Python-Boto解決這個問題的唯一方法就是創建一個「監聽者」來不斷地閱讀這些消息並用這個消息「做些什麼」。
while 1:
m = conn.receive_message(
q,
number_messages=1,
message_attributes=['configName'],
attributes='All'
)
if not m:
time.sleep(5)
else:
a = str(m[0].message_attributes.get('configName').get('string_value'))
rh = str(m[0].receipt_handle)
# Processing the message in a EC2 instance
conn.delete_message_from_handle(q, rh)
time.sleep(5)
因此,如在上面的代碼中看出,我讀消息的屬性(在這種情況下,只有一個爲簡單起見),我必須處理它。
如何在不同的EC2實例中並行處理傳入消息?我不明白,因爲我只有一個偵聽器,並且如果偵聽器正忙於處理一條消息,它將不會處理任何其他消息,直到它完成第一條消息。我希望聽者並行處理任何數量的消息(當然,取決於實例的數量和我要支付的賬單)。我如何知道哪個EC2實例將運行我的.sh程序?
還有另一種方法可以使用任何Amazon服務以更簡單的方式執行此操作?
感謝
你可能想看看這裏:https://wiki.python.org/moin/ParallelProcessing –
您也可以看看這個答案:HTTP: //stackoverflow.com/a/20549090/1851986 –
如果您希望多個EC2實例並行處理消息,則需要從隊列中讀取多個實例。只要每個工作人員讀取消息,在處理過程中使其不可見,然後在完成工作時刪除消息,則可以根據需要獲取儘可能多的工作者實例。 – garnaat