Я какое-то время играл с Masstransit и RabbitMQ, создавая контракты сообщений для обеспечения связи между двумя. NET основными веб-API, и я наткнулся на следующее.
Предположим, у меня указан контракт ниже в обоих проектах:
public class Profile : BaseEntity
{
public string Name { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
public DefaultMode Mode { get; set; }
public string SuperMode { get; set; }
public ExtraClient? Client { get; set; }
}
Всякий раз, когда я публикую sh сообщение
await _publishEndPoint.Publish<Profile>(profileUpdate);
Другой конец (потребитель на API получателя / подписчика) может получить только примитивный тип поля, например, Имя , Описание и IsActive .
Остальные поля анализируются как null , хотя я хорошо знаю, что до публикации свойств profileUpdate имеют правильные значения.
Кто-нибудь сталкивался с чем-то подобным?
Это из-за наследства?
С уважением,
Редактировать # 1: Синтаксис
Редактировать # 2: публикация дополнительной информации
В соответствии с запросом мой класс потребителя:
public class ProfileUpdateConsumer : IConsumer<Profile>
{
private readonly IProfilesHub _profileHub;
public ProfileUpdateConsumer(IProfilesHub profileHub)
{
_profileHub = profileHub;
}
public async Task Consume(ConsumeContext<Profile> context)
{
await _profileHub.BroadcastProfileUpdate(context.Message);
}
}
А вот мой класс издателя:
publi c class ProfilePublisher: IPublisher {private readonly IPublishEndpoint _publishEndPoint;
public ProfilePublisher(IPublishEndpoint publishEndpoint)
{
_publishEndPoint = publishEndpoint;
}
public async Task PublishProfileUpdate(object profileUpdate)
{
await _publishEndPoint.Publish<Profile>(profileUpdate);
}
}