Warum funktioniert die benutzerdefinierte MassTransit-Deserialisierung nicht mit Azure Service Bus SubscriptionEndpoint?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Warum funktioniert die benutzerdefinierte MassTransit-Deserialisierung nicht mit Azure Service Bus SubscriptionEndpoint?

Post by Guest »

Ich versuche, MassTransit so zu konfigurieren, dass eine benutzerdefinierte Deserialisierungsstrategie für eine EventPlanCreated-Nachricht verwendet wird, wenn Nachrichten von Azure Service Bus konsumiert werden.
Trotz der Konfiguration von ClearSerialization und UseRawJsonSerializer tut der Verbraucher dies nicht. Es scheint, dass die eingehende JSON-Nachricht nicht ordnungsgemäß deserialisiert wird. Das Nachrichtenformat ist gültig, aber es bindet nicht an die EventPlanCreated-Klasse.
Image

Das Objekt wird nur deserialisiert, wenn das Ereignis von Masstransit veröffentlicht wird, was die anderen Eigenschaften in der Nachricht einschließt.
Image

Die Nachricht ist ein einfaches JSON-Objekt:

Code: Select all

{
"PlanId": "1",
"Description":"test"

}
Hier ist meine Verbraucherimplementierung:

Code: Select all

   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; }
}
Hier ist die Konfiguration in Program.cs:

Code: Select all

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();
});
});
});

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post