Издатель Masstransit RabbitMQ не может опубликовать sh «правильный» контракт - PullRequest
0 голосов
/ 11 марта 2020

Я какое-то время играл с 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);
    }
}
...