Поддерживать порядок сообщений в исходящей очереди - .Net - PullRequest
2 голосов
/ 20 декабря 2011

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

Система требует высокой скорости обработки и пропускной способности. В мире .net какая очередь была бы идеальной для этого сценария?

1 Ответ

3 голосов
/ 20 декабря 2011

Это фундаментальная проблема, связанная с заказанной доставкой - где-то в вашей системе вам нужно свести все к одному потоку.Это неизбежно.

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

Однако, есть способ, которым вы можете обрабатывать сообщения одновременно, но тогда вам нужно как-то собрать их в правильном порядке снова.Существует шаблон проектирования интеграции под названием Resequencer - http://eaipatterns.com/Resequencer.html.

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

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

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

...