RabbitMQ: пометить сообщение как устаревшее - PullRequest
1 голос
/ 01 февраля 2011

Глобальный вопрос: можем ли мы пометить сообщение как устаревшее, прежде чем оно будет обработано клиентом?

Контекст:

  • У меня есть кластер машин
  • Каждоемашина отправляет сообщение, когда что-то меняется
  • Сообщение является объектом Rails, который изменился
  • Клиент, получив это сообщение, просто сохраняет его

Сценарий

  • Учитывая 3 машины A, B и C
  • Учитывая, что объект O принадлежит машине A
  • A находится вне сети
  • Есть много измененийна объекте O на машине A

Когда сеть снова подключится, я хотел бы отменить все сообщения, касающиеся O, кроме последнего (на стороне производителя или на стороне потребителя).Таким образом, B и C сохранят не все состояния объекта O, а только последний.

Вопросы:

  • Как вы думаете, это возможно?
  • Есть ли лучший способ добиться синхронизации (мы не хотим использовать кластер MySQL)

Спасибо.

1 Ответ

0 голосов
/ 26 июня 2011

мы делаем что-то silimar (в .net, но), если узел выходит из сети или перезагружается, тогда, когда он возвращается, первое, что он делает, - спрашивает все остальные узлы об обновлении состояния. Все узлы отправляют это всем узлам. Затем мы используем отметку времени, чтобы воздействовать на сообщение только в том случае, если оно более свежее, чем последнее обработанное сообщение. Похоже, что он отлично работает для того, что нам нужно: 5 рабочих узлов с одинаковой конфигурацией и синхронизирующих любые изменения между собой.

...