Способ подхода к этому состоит в том, чтобы подумать о том, какие существенные различия существуют в сообщении пользователя, где пользовательский ключ равен 111 или 222, и сообщение пользователя, где это не так.
Вероятный вывод состоит в том, что они фактически представляют собой разные вещи в вашем бизнес-процессе, поскольку каждый будет потребляться с другим эффектом, чем другой. Это сигнал, что вам действительно нужно создавать новые типы сообщений, чтобы различать эти различные бизнес-кейсы.
Скажет, например, у вас есть следующее сообщение о событии:
public interface IUserAddedInformation
{
Guid UserKey { get; set; }
InformationType informationType { get; set; }
}
public enum InformationType
{
Address,
CreditCard
}
Вы настраиваете абонент для обработки сообщения и обрабатывать изменения. Однако вы скоро поймете, что личные данные, такие как данные адреса и оплаты, такие как данные кредитной карты, очень разные, поэтому вы хотите обрабатывать два экземпляра отдельно. Но как это сделать без маршрутизации на основе поля informationType в сообщении?
public interface IUserAddedCreditCard
{
Guid UserKey { get; set; }
}
public interface IUserAddedAddress
{
Guid UserKey { get; set; }
}
Теперь вы можете создавать отдельные обработчики для обоих событий. Возможно, вы сможете пройти аналогичный процесс в приведенном выше примере, чтобы выяснить, как получить нужное поведение маршрутизации.
+1 и я согласен, что это обычно ответ. Однако, безусловно, есть случаи, когда требуется нечто, эквивалентное контенту-маршрутизации, и наличие отдельных типов сообщений невозможно. Например, представьте себе конечную точку, которая публикует обновления рыночной цены для многих тысяч символов тикера. Конкретный клиент интересуется только 10 символами. Было бы очень неэффективно получать все события и отказываться от 99,9% из них. –
@PhilSandler да, я полностью согласен с этим. Однако в этом случае я хотел бы утверждать, что абонент должен выполнить «маршрутизацию» на своем конце, просто проверив сообщения по мере их обработки и отбросив любые, которые им не интересны, хотя это выглядит довольно расточительно. –