2009-07-28 9 views
3

Недавний presentation Я видел относительно RabbitMQ упоминал использование чего-то, называемого «барьером идемпотентности» для устранения дублирования сообщений. Это просто причудливое имя для конферанса сообщений или это нечто более конкретное. Если да, то что именно? Поиск Google дал результаты, которые в основном связаны с RabbitMQ, с небольшим объяснением того, что это было.Idempotency Barrier для обмена сообщениями

ответ

9

Idempotency - это поведение функции, когда выполнение функции на выходе функции n раз приводит к тому же состоянию, что и функция, выполняемая один раз. Это полезно в среде обмена сообщениями, поскольку отложенные сообщения не вызывают неожиданного поведения. Хотя объединение означает, что сообщения будут сконцентрированы для предотвращения дублирования, идемпотент подразумевает, что система обмена сообщениями допускает множественные передачи и выполнение дублированных сообщений, при этом сохраняя, что выполнение нескольких копий сообщения имеет тот же результат, что и выполнение одного сообщения.

+0

Если я правильно понял, ваше последнее предложение, по-видимому, подразумевает, что идемпотентность фактически является функцией потребителя сообщений, а не рамки. Если это так, то что означает, что структура должна быть невосприимчивой? Если структура позволяет выполнять дубликаты, клиент должен обнаруживать дубликаты и игнорировать их или оставаться незатронутыми. – omerkudat

+1

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

+0

Вы можете реализовать скользящее окно (похожее на TCP), если знаете, что ваши SLA в терминах отложенных сообщений. т. е. если вы создаете SLA, то в кэше должны храниться только последние 1000 сообщений, тогда у вас есть ограниченная память. Для большинства ситуаций такой тип размещения должен быть достаточным, поскольку они будут иметь реалистичную верхнюю границу для задержек - но, очевидно, не допускают «бесконечных» задержек, если вам когда-либо понадобится это. Итог, выясните свои SLA. –

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