2012-05-31 2 views
0

Я оцениваю MassTransit с RabbitMQ для проекта, и мы хотим, чтобы уметь обрабатывать обработку сообщения в определенное время.Сообщение процесса MassTransit в будущем

Цель заключается в следующем:

  • Пользователь делает некоторые вещи, которые влияют на других пользователей
  • сообщение отправляется на шину, чтобы уведомить пострадавших пользователей через час
  • Пользователь делает больше вещей и отправляет больше уведомлений
  • Проходит час:
    • Прошло больше часа с тех пор, последнее резюме: сообщение обрабатывается, собирает все ожидающие уведомления для каждого пользователя, отправляет их резюме, если есть хотя бы один.
    • Прошло меньше часа с момента последнего сводки: сообщение не обрабатывается и снова ставится в очередь еще на один час.

Дело в том, что многие вещи могут быть уведомлен таким образом, мы не хотим, чтобы отправить их немедленно, но кратко позже. Можно ли это сделать с помощью MassTransit и RabbitMQ?

ответ

0

Я думаю, вы хотели бы разделить это на две стадии, поэтому сообщения обрабатываются, когда они приходят, но не действуют до тех пор, пока это не потребуется.

  1. Процесс MassTransit получает сообщение и сохраняет уведомление в некотором хранилище данных.

  2. У вас также есть процесс суммирования, который время от времени запускается, просматривает хранилище данных, чтобы узнать, что является выдающимся, и отправляет сгенерированные уведомления пользователю, если прошло больше часа с момента их последнего резюме.

Edit: Это может быть возможно взломать RabbitMQ, чтобы сделать это, см http://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message-delivery.html

+0

Это как-то так, как сейчас, процесс кварца запускается время от времени для сбора уведомлений. Я просто хотел попробовать другой POV. NServiceBus задерживает сообщения, но это действительно трюк, подобный тому, который вы описали с помощью RavenDB, чтобы сохранить материал. –

2

Я понимаю, что это старый пост, но кто ищет решение этой проблемы следует проверить https://github.com/MassTransit/MassTransit-Quartz.

Вы по существу публикуете сообщение с задержкой со временем, которое оно должно быть повторно опубликовано на шине, а служба Quartz (предоставленная в проекте) заботится о сохранении ее во временном хранилище, а затем публикует ее, когда время приходит.

+0

Это хороший вариант. Вопрос был старый, и мы упростили решение, но мы будем иметь это в виду в будущем. –

Смежные вопросы