Почему MassTransit Custom Deserialization не работает с Azure Service Bus PusppringEndPoint?C#

Место общения программистов C#
Ответить
Anonymous
 Почему MassTransit Custom Deserialization не работает с Azure Service Bus PusppringEndPoint?

Сообщение Anonymous »

Я использую MassTransit с Azure Service Bus и мой потребитель не получает события, когда тело сообщения использует пользовательский формат JSON . Формат события издателя не может быть изменен, потому что это внешнее приложение.{
"planId": "1",
"description": "Startup Event"
}

MassTransit обрабатывает событие только в том случае, если сообщение имеет ожидаемую структуру:
(Событие заключено в свойство сообщения.
Тип события указан в свойство eventType.)
СОБЫТИЕ, КОТОРОЕ РАБОТАЕТ:
"messageType": [
"urn:message.Enterprise.TM.Core.Events.ServiceBus:EventPlanCreated"
],
"message": {
"planId": "1",
"description": "Startup Event"
},

Тем не менее, Событие Format Format от издателя не следует за этой структурой, поэтому потребитель не получает события . Я попытался внедрить пользовательский Deserializer для обработки пользовательского формата, но он, похоже, не применяется. С помощью пользовательского корпуса JSON? я следил за документацией MassTransit, но она не работает с сервисной шиной https://masstransit.io/documentation/co ... n#raw-json
Вот моя реализация потребителя: < /p>
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»