Я использую 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
Почему MassTransit Custom Deserialization не работает с Azure Service Bus PusppringEndPoint? ⇐ C#
Место общения программистов C#
1737828417
Anonymous
Я использую MassTransit с Azure Service Bus и [b] мой потребитель не получает события, когда тело сообщения использует пользовательский формат JSON [/b]. Формат события издателя не может быть изменен, потому что это внешнее приложение.{
"planId": "1",
"description": "Startup Event"
}
MassTransit обрабатывает событие только в том случае, если сообщение имеет ожидаемую структуру:
(Событие заключено в свойство сообщения.
Тип события указан в свойство eventType.)
СОБЫТИЕ, КОТОРОЕ [b]РАБОТАЕТ:[/b]
"messageType": [
"urn:message.Enterprise.TM.Core.Events.ServiceBus:EventPlanCreated"
],
"message": {
"planId": "1",
"description": "Startup Event"
},
Тем не менее, [b] Событие Format Format от издателя не следует за этой структурой, поэтому потребитель не получает события [/b]. Я попытался внедрить пользовательский Deserializer для обработки пользовательского формата, но он, похоже, не применяется. С помощью пользовательского корпуса JSON? [b] я следил за документацией MassTransit, но она не работает с сервисной шиной [/b] https://masstransit.io/documentation/configuration/serialization#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();
});
});
});
Подробнее здесь: [url]https://stackoverflow.com/questions/79354273/why-is-masstransit-custom-deserialization-not-working-with-azure-service-bus-sub[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия