二、”工作隊列”
在第一節(jié)中我們發(fā)送接收消息直接從隊列中進(jìn)行。這節(jié)中我們會創(chuàng)建一個工作隊列來分發(fā)處理多個工作者中的耗時性任務(wù)。
工作隊列主要是為了避免進(jìn)行一些必須同步等待的資源密集型的任務(wù)。實際上我們將這些任務(wù)時序話稍后分發(fā)完成。我們將某個任務(wù)封裝成消息然后發(fā)送至隊列,后臺運行的工作進(jìn)程將這些消息取出然后執(zhí)行這些任務(wù)。當(dāng)你運行多個工作進(jìn)程的時候,這些任務(wù)也會在它們之間共享。
前期準(zhǔn)備
上一節(jié)的練習(xí)中我們發(fā)送的是簡單包含“Hello World!”的消息,這節(jié)我們還發(fā)送字符串不過用此代表更復(fù)雜的任務(wù),實際我們這里并沒有真正的任務(wù),像圖片縮放或pdf文件渲染之類的,這里我們假裝我們很忙(即處理的消息任務(wù)很耗時),使用time.Sleep函數(shù)實現(xiàn)。我們用字符串中的”.”符號的數(shù)量代表任務(wù)的復(fù)雜性,每一個”.”需要耗時1s來執(zhí)行處理。比如:”Hello…”代表該消息處理耗時3s。
我們稍微修改下上節(jié)中send.go代碼,為了可以在命令行直接發(fā)送任意數(shù)量的消息。該程序?qū)⑷蝿?wù)發(fā)送到我們的隊列,暫且命名為new_task.go:
body := bodyFrom(os.Args) err = ch.Publish( "", // exchange q.Name, // routing key false,