1

我想在我的rails應用程序的背景中異步輪詢消息。 Shoryuken不起作用,因爲我想讓我的Rails應用程序也監聽傳入的HTTP請求。如何在我的Rails應用程序的背景中偵聽AWS SQS消息?

+0

爲什麼Shoryuken不起作用? Shoryuken以Rails應用程序的獨立流程運行,它不應該影響/更改Rails應用程序中的任何內容。 –

+0

@PabloCantero - 感謝您的評論。我們將我們的服務部署在docker中,所以我們希望將所有內容都包裝到同一個進程中。通常這種方法只有2個容器 - 一個用於Rails,一個用於隊列處理,這種方式每個都有自己的進程,但考慮到在這個特定的應用中隊列負載的重量是多少,這是不值得的操作和計算採取這種方法的開銷 – jtmarmon

回答

3

config/initializers像這樣創建初始化:

# Allows the thread to crash our app for us 
Thread.abort_on_exception = true 
Thread.new do 
    queue_url = "..." 
    poller = Aws::SQS::QueuePoller.new(queue_url) 
    poller.poll do |msg| 
     puts msg.body 
    end 
end 

可以使用Active Job通過更復雜的工作處理消息:

創建像這樣的工作: rails g job process_a_message

然後在輪詢塊:

poller.poll do |msg| 
     ProcessAMessageJob.perform_later msg.body 
    end 
+2

有沒有人真的用ActiveJob嘗試這件作品?從Rails控制檯來看,初始化程序對我們來說工作得很好,但服務器在守護進程模式下運行時,線程在初始消耗後似乎崩潰... –

+0

得到了同樣的問題.... –

相關問題