2016-07-30 41 views
1

我有一個用Ruby編寫的應用程序,它有多個線程,每個線程向遠程AMQP端點發送請求。這些線程不時會產生新的任務必須運行。RabbitMQ:將消息路由到線程

如果我使用每個線程暫時的,獨特的隊列發送響應他們的要求,那麼就很容易把代碼寫在這個Ruby的服務來處理傳入的消息。一旦關聯的頻道關閉,隊列就會被刪除,以便在他們的目的結束後不會停留。

我能想到的所有備選方案需要監聽線程監聽接收所有傳入的消息/響應與Ruby的服務的一個或多個隊列,然後使用一些消息標識符將這些消息路由到等待的線程。這看起來更加複雜,我無法將RabbitMQ用於所有需要的語義路由。

第一個模型是AMQP通信的可行模型嗎?處理這種情況是否有更好的模式?

回答

2

的答案在很大程度上取決於你的使用情況

,如果你不關心,當一個給定的隊列將被刪除丟失的郵件,那麼第一個選項是好的。

,如果你需要的信息貼在隊列中,直到周圍的東西出現時處理它,那麼你需要有一個持久的隊列,其中的消息坐下。

對於每個線程都沒有要求,使用rabbitmq。

但是,您應該使用每個線程的通道。

因爲,可以有每個線程一個信道和具有多個信道從相同的(或不同的)隊列消耗沒有問題。

只要你保持侷限於單個線程的通道,你可以做任何你在問候你是從消費隊列需要。