【问题标题】:MassTransit new consumer (and di scope) for every message with prefetchcount > 1预取计数 > 1 的每条消息的 MassTransit 新消费者(和 di 范围)
【发布时间】:2019-01-25 21:03:50
【问题描述】:

我正在尝试使用 MassTransit.ExtensionsDependencyInjectionIntegration 进行设置并尝试使用 PrefetchCount。我注意到对于多条消息,有时会使用同一个消费者。

有没有办法强制masstransit 为每条消息创建消费者?

我的服务逻辑需要为每条消息提供新的 di 范围,据我所知,只有我们每次都创建消费者才有可能。

更新

我使用this library 来注册消费者和发布者。

Here you can see,它使用TryAddTrancient() 注册消费者。这会是个问题吗?我仍然认为 di 容器应该为每个请求产生消费者。

看起来这不是故意的行为,我会更深入地研究我的问题。

【问题讨论】:

  • 请至少提供您用于注册消费者的代码。
  • 如果您已将您的消费者注册为作用域,并且正在为 MassTransit 使用 MS DI 扩展,则应从容器中为每条消息解析一个新的消费者。更高的预取计数导致更高程度的并发,多个消费者实例同时运行。
  • @AlexeyZimarev 我已经更新了帖子。我使用了一个包装库,但我在它注册消费者的地方链接了一行代码。
  • @ChrisPatterson 是的,当然,我明白这一点。我为构造函数和消费者的Consume() 方法设置断点。然后看到单个构造函数调用和多个 Consume 调用。我绝对没有将我的消费者注册为单身人士,所以我对这种行为感到很困惑。我还链接了一个用于注册消费者的库。
  • 那个库是一个残骸,它没有使用 MS DI 消费者范围提供程序,所以根本没有创建范围:github.com/axle-h/MassTransit.RabbitMq.Extensions.Hosting/blob/… - 该库需要一些清理才能使它合理。

标签: c# dependency-injection .net-core rabbitmq masstransit


【解决方案1】:

我会建议使用MassTransit.AspNetCore 使用的包

请通过documentation,其中包括示例。

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
}

【讨论】:

  • 这是否仍然适用于较新的版本?
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多