2017-03-10 104 views
0

我在處理CPU綁定任務的NodeJS上編寫服務。主要的想法是很簡單:停止RabbitMQ消費者進程當前消息

  1. 客戶(瀏覽器)發送請求
  2. 網絡服務器(的NodeJS + ExpressJS)處理請求:生成ID,增加了一個任務與該ID來的RabbitMQ和回覆客戶端用那個ID。
  3. 此外Web服務器添加任務Redis的服務器ID作爲密鑰,並且{status: active}作爲一種價值
  4. 消費者在大約一分鐘和更新Redis的條目以獲取結果處理任務
  5. 客戶端使用此ID來檢查相應任務的狀態。

問題:我希望消費者如果客戶已停止詢問該任務仍在運行的服務器停止處理任務的第4步。我如何用RabbitMQ做到這一點?

P.S:我試圖清除隊列,但面臨着一些問題:隊列不清除如果消息沒有被消費者認可。作爲難過的here,這隻會在我的CPU綁定任務完成後纔會發生。

回答

0

我已經想通了,我的吹掃消費者的問題,但不使用RabbitMQ的,因爲沒有發現任何API。

this answer上SO提到的,我可以在另一個數據庫檢查,如果消費者應着手與否。所以我決定使用redis也是爲了這個目的:在工作線程內部,如果密鑰尚未過期,我會檢查redis中的相應條目。

希望這會對別人有幫助。

相關問題