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