2009-07-16 49 views
3

我有一個系統會偶爾生成消息,我只想每5分鐘提交一個零或一條消息。如果沒有消息生成,則隊列消費者不會處理任何消息。如果在5分鐘內生成了100個相同的消息,我只希望其中的一個消息從隊列中消耗。AMQP延遲傳遞和防止重複郵件

我正在使用AMQP(RabbitMQ),有沒有辦法在rabbitmq或AMQP協議內完成此操作?我可以檢查隊列的內容以確保我不插入重複的內容嗎?似乎隊列檢查是一個壞主意,通常不應該爲郵件系統做什麼。

沒有隊列檢查,這可以用這些工具來完成嗎?想到的唯一解決方案是擁有第二個接收所有消息的隊列,然後消費者讀取每條消息並將其放入內部隊列中,等待5分鐘,並丟棄接收到的任何重複消息。延遲之後,單個消息被置於「真實」隊列中進行處理。

看起來這可能是一個常見的情況,一個隊列系統可以處理。有任何想法嗎?

回答

2

處理消息狀態不是AMQP正在處理的事情。您可以嘗試處理AMQ和代理消息中存在的某些進程中的狀態(例如您在原始問題中編寫的內容)。根據您的情況,您可能可以使用序列或更復雜的方式進行無狀態重複檢測,但AMQP不處理此特定用例。

唯一可以保證的是,如果多個綁定匹配隨後傳遞到隊列的消息,則只有一條消息被實際傳遞。