MassTransit новый потребитель (и область видимости) для каждого сообщения с prefetchcount> 1 - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь настроить все с помощью MassTransit.ExtensionsDependencyInjectionIntegration и экспериментирую с PrefetchCount.Я заметил, что для нескольких сообщений иногда используется один и тот же потребитель.

Есть ли способ заставить masstransit создать получателя для каждого сообщения?

Моей сервисной логике нужна новая область видимости для каждого сообщения, и, насколько я понимаю, это возможно, только если мы создадим потребителякаждый раз.

UPD

Я использую эту библиотеку для регистрации потребителей и издателей.

Здесь вы можете увидеть , что он регистрирует потребителей с помощью TryAddTrancient().Может ли это быть проблемой?Я все еще думаю, что ди-контейнер должен производить потребителей для каждого запроса.

Похоже, это не преднамеренное поведение, я рассмотрю мою проблему глубже.

1 Ответ

0 голосов
/ 28 января 2019

Я бы предложил использовать MassTransit.AspNetCore пакет, который использует

Пожалуйста, ознакомьтесь с документацией , которая включает образцы.

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services
        services.AddHealthChecks();

        services.AddMvc();

        // Register your consumers if the need dependencies
        services.AddScoped<SomeDependency>()
        services.AddScoped<OrderConsumer>();

        // Register MassTransit
        services.AddMassTransit(
            provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var host = cfg.Host("localhost", host => 
                { 
                    host.Username("guest");
                    host.Password("guest");
                });

                cfg.ReceiveEndpoint(host, "submit-order", ep =>
                {
                    ep.PrefetchCount = 16;
                    ep.UseMessageRetry(x => x.Interval(2, 100));

                    ep.Consumer<OrderConsumer>(provider);
                });
            }),
            x => x.AddConsumer<OrderConsumer>());
    }

    // everything else
}
...