2012-05-31 44 views
0

我正在用項目的RabbitMQ評估MassTransit,我們希望能夠將消息的處理延遲到特定時間。MassTransit未來處理消息

目的如下:

  • 用戶做某些事情,影響其他用戶
  • 的消息被髮送到總線通知受影響的用戶小時後
  • 用戶確實更多的事情,併發送更多的通知
  • 一個小時過去了,並且:
    • 自從一個多小時後最後的摘要:處理該消息,收集每個用戶的所有未決通知,如果至少有一個通知發送給他們。
    • 自上次摘要以來不到一小時:郵件未處理,並且再次排隊等待一小時。

的事情是,很多東西都可以被通知,所以我們不希望立即但後來總結給他們。這可以用MassTransit和RabbitMQ完成嗎?

回答

0

我想你會想把它分成兩個階段,所以消息到達時會被處理,但是直到需要時纔會執行。

  1. MassTransit進程接收到消息,並將通知保存在某種數據存儲中。

  2. 您還有一個彙總過程,它偶爾運行,查看數據存儲以查看未完成的數據,並將彙總的通知發送給用戶,如果用戶上次彙總後超過一小時。

編輯:它可能會破解的RabbitMQ要做到這一點,看到http://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message-delivery.html

+0

這就像我們現在所做的那樣,不時地觸發一個Quartz進程來收集通知。我只是想嘗試另一個POV。 NServiceBus有延遲的消息,但它真的是一個像你用RavenDB描​​述的那樣保持東西的技巧。 –

2

我意識到這是一個老帖子,但任何人都在尋找一個解決這個問題應該檢查https://github.com/MassTransit/MassTransit-Quartz

本質上,您發佈延遲的消息的時間應該重新發布到總線上,並且Quartz服務(在項目中提供)負責將其保存到臨時存儲區,然後在時間到了。

+0

這是一個不錯的選擇。問題很老,我們簡化了解決方案,但我們將來會考慮到這一點。 –