2016-04-18 3 views

ответ

1

Да - и нет :)

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

И когда я говорю «толерантное к переупорядоченному сообщению», я не обязательно имею в виду «все сообщения в абсолютно случайном порядке» ... больше похоже на «слегка переупорядоченный» и/или «некоторые из них должны быть в но может терпеть многие из них переупорядоченные ». В пределах разумного.

Это звучит так, как будто ваше требование довольно строгое - и единственный способ достичь этого - это иметь один поток (с параллелизмом 1) обработки сообщений, отбрасывая (или перемещаясь в обратную сторону очереди, если сообщения важны) сообщения, которые не ожидали быть следующей.

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

Надеюсь, это имеет смысл :) Пожалуйста, дайте мне знать, если что-то неясно.

+0

@ mooid8000: Это не сработает, если я запускаю обработчики на нескольких машинах. Верный? – Chandu

+0

правильный - для этого вам понадобится какой-то механизм распределенного сериализации ... но в целом лучше использовать очереди для работы, которые МОГУТ быть распределены и обработаны одновременно, возможно параллельно на нескольких машинах, и, таким образом, он лучше всего работает, если работа, необходимая для обработки каждого сообщения, является довольно независимой и не противоречит тем же ресурсам – mookid8000

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