Несмотря на настройку ClearSerialization и UseRawJsonSerializer, потребитель не делает этого. Кажется, я правильно десериализую входящее сообщение JSON. Формат сообщения допустим, но он не привязан к классу EventPlanCreated.

Он десериализует объект только тогда, когда событие публикуется Masstransit, который включает в себя другие свойства в сообщении.

Сообщение представляет собой простой объект JSON:
{
"PlanId": "1",
"Description":"test"
}
Вот моя потребительская реализация:
public class ServiceBusEventConsumer : IConsumer
{
private readonly IServiceBusEventProcessorFactory _serviceBusEventProcessorFactory;
public ServiceBusEventConsumer(IServiceBusEventProcessorFactory serviceBusEventProcessorFactory)
{
_serviceBusEventProcessorFactory = serviceBusEventProcessorFactory;
}
public Task Consume(ConsumeContext context)
{
// var strategy = _serviceBusEventProcessorFactory.GetServiceBusEventHandlerStrategy(context.Message.ServiceBusEventType);
// await strategy.HandleEventAsync(context.Message);
return Task.CompletedTask;
}
}
public class EventPlanCreated
{
public string EventId{ get; set; }
public string Description{ get; set; }
}
Вот конфигурация в Program.cs:
builder.Services.AddMassTransit(x =>
{
x.AddConsumer();
x.UsingAzureServiceBus((context, cfg) =>
{
cfg.Host(builder.Configuration["ServiceBusSettings:ConnectionString"]);
// Configure Subscription Endpoint
cfg.SubscriptionEndpoint("tmsuscription", e =>
{
e.ConfigureConsumeTopology = false;
e.ConfigureConsumer(context);
// Use custom deserializer
e.ClearSerialization();
e.UseRawJsonSerializer();
});
});
});
Подробнее здесь: https://stackoverflow.com/questions/793 ... ce-bus-sub
Мобильная версия