Контракты с сообщениями не отличаются от любых других контрактов API, и вы относитесь к ним соответственно. Рассматривайте любой общедоступный API как нечто, что появилось в мире, и вы не можете контролировать всех, кто использует API.
Существует довольно много хороших рекомендаций по версионированию контрактов, и там нет ничего специфического для MassTransit.
MassTransit, с другой стороны, предлагает несколько советов о том, как работать с версиями сообщений в документация . В частности, мы предлагаем не создавать новую версию, если вы следуете подходу Weak Schema и добавляете свойства, которые могут быть пустыми и не важными для потребителя. Кроме того, вы можете использовать состав интерфейса, как в этом примере из документов:
class RemoteImageCachedEvent :
RemoteImageCached,
RemoteImageCachedV2
{
Guid EventId { get; set; }
DateTime Timestamp { get; set; }
Guid InitiatingCommandId { get; set; }
Uri ImageSource { get; set; }
string LocalCacheKey { get; set; }
Uri LocalImageAddress { get; set; }
}
, поэтому при публикации экземпляра RemoteImageCachedEvent
он будет доставлен в обмен сообщениями для обоих интерфейсов.
Если вы полностью измените поверхность своего API, будь то сообщения, Grpc или REST, вам необходимо рассмотреть обратную совместимость и некоторое время продолжать потреблять как старые, так и новые сообщения. Дайте людям некоторое время, чтобы перейти с одной версии на другую и убейте старую версию, если вам нужно.