.NET Core 2.2 RawRabbit Сериализатор / Проблема внедрения зависимостей - PullRequest
0 голосов
/ 24 апреля 2019

У меня микросервис на основе .NET Core 2.2.Я использую RawRabbit (версия 2.0.0-бета9) в качестве служебной шины.Следующие пакеты были установлены вместе с ним:

<PackageReference Include="RawRabbit" Version="2.0.0-beta9" />
<PackageReference Include="RawRabbit.DependencyInjection.ServiceCollection" Version="2.0.0-beta9" />
<PackageReference Include="RawRabbit.Operations.Publish" Version="2.0.0-beta9" />
<PackageReference Include="RawRabbit.Operations.Subscribe" Version="2.0.0-beta9" />

Вот так выглядит мой контроллер:

    private readonly IBusClient _busClient;

    //...constructor that inits the _busClient

    [HttpPost("")]
    public async Task<IActionResult> Post([FromBody] CreateActivity model)
    {
        model.Id = Guid.NewGuid();
        await _busClient.PublishAsync(model); //Exception thrown here
        return Accepted($"Activities/{model.Name}");
    }

Проблема возникает, когда код пытается выполнить следующее:

await _busClient.PublishAsync(model);

Исключение, которое я получаю:

MissingMethodException: метод не найден: 'Void Newtonsoft.Json.JsonSerializer.set_TypeNameAssemblyFormat (System.Runtime.Serialization.Formatters.FormatterAssemblyStyle)'.RawRabbit.DependencyInjection.RawRabbitDependencyRegisterExtension + <> c.b__0_1 (распознаватель IDependencyResolver)

....... больше текста .......

RawRabbit.BusClient.InvokeAsync (действие pipeCfg, Действие contextCfg, CancellationToken token) Actio.Api.Controllers.ActivitiesController.Post (модель CreateActivity) в ActivitiesController.cs

, за которым следует код моего действия Post, как показано выше.

Следующее действие работает, как и ожидалось:

    [HttpGet]
    public IActionResult Get()
    {
        return Content("Hello from Actio API!");
    }

Я предположил, что это действие не использует IBusClient.Итак, проблема должна была быть с RawRabbit.Я погуглил проблему и нашел проблему в репозитории RawRabbit GitHub.Решением было перейти на более новую версию на RawRabbit.Итак, я попытался обновить до 2.0.0-rc1, но я получил некоторые синтаксические ошибки.Я определил класс Extensions, который определяет следующий метод:

public static Task WithCommandHandlerAsync<TCommand>(this IBusClient bus, 
                ICommandHandler<TCommand> handler) where TCommand: ICommand
                => bus.SubscribeAsync<TCommand>(msg => handler.HandleAsync(msg),
                ctx => ctx.UseConsumerConfiguration(cfg => 
                    cfg.FromDeclaredQueue(q => q.WithName(GetQueueName<TCommand>()))));

Кажется, проблема в UseConsumerConfiguration.В сообщении об ошибке говорится:

Контекст ISubscribe не содержит определения для UseConsumerConfiguration

Дополнительная информация: Я изучаю курс .NET Microservices по Packt Publishing.Этот код, кажется, хорошо работает для них с теми же пакетами.

1 Ответ

0 голосов
/ 15 июня 2019

Обновление версии RawRabbit до 2.0.0-rc5

После этого используйте UseSubscribeConfiguration вместо UseConsumerConfiguration

...