C# RabbitMQ在同一进程中有多个使用者

C# RabbitMQ在同一进程中有多个使用者,c#,rabbitmq,C#,Rabbitmq,我有一个.NET项目需要读取给定队列中的消息。 我有几个生产者将相同类型的消息写入队列。 我希望我的消费者应用程序有几个线程读取消息并处理它们,这样负载就不会在单个线程上 关于如何实现这一点,有什么想法或示例代码吗? 请再次注意: 每条消息应处理一次,而不是多次。工作线程之间的工作应该是平衡的,您需要一些管道来完成这项工作 我有一个开源服务总线,还有很多其他的服务总线选项,你可以考虑。 但是,如果您不想走这条路,您仍然可以查看一些代码和实现,以获得一些想法。我有一个可能会有所帮助的实现。您需要一

我有一个.NET项目需要读取给定队列中的消息。 我有几个生产者将相同类型的消息写入队列。 我希望我的消费者应用程序有几个线程读取消息并处理它们,这样负载就不会在单个线程上

关于如何实现这一点,有什么想法或示例代码吗? 请再次注意:
每条消息应处理一次,而不是多次。工作线程之间的工作应该是平衡的,您需要一些管道来完成这项工作

我有一个开源服务总线,还有很多其他的服务总线选项,你可以考虑。


但是,如果您不想走这条路,您仍然可以查看一些代码和实现,以获得一些想法。我有一个可能会有所帮助的实现。

您需要一些管道来完成这项工作

我有一个开源服务总线,还有很多其他的服务总线选项,你可以考虑。


但是,如果您不想走这条路,您仍然可以查看一些代码和实现,以获得一些想法。我有一个可能会有所帮助的实施方案。

看看masstransit项目:

它具有预取计数和并发限制等配置。它让您并行地使用消息

此外,设置非常简单:

IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    IRabbitMqHost host = cfg.Host(new Uri(RabbitMQConstants.RabbitMQUri),
        hst =>
        {
            hst.Username(RabbitMQConstants.RabbitMQUserName);
            hst.Password(RabbitMQConstants.RabbitMQPassword);
        });

    cfg.ReceiveEndpoint(host,
        RabbitMQConstants.YourQueueName,
        endPointConfigurator => { 
            endPointConfigurator.Consumer<SomeConsumer>();
            endPointConfigurator.UseConcurrencyLimit(4);
        });
});

busControl.Start();

public class SomeConsumer :
    IConsumer<YourMessageClass>
{
    public async Task Consume(ConsumeContext<YourMessageClass> context)
    {
        await Console.Out.WriteLineAsync($"Message consumed: {context.Message.YourValue}");

    }
}
IBusControl busControl=Bus.Factory.CreateUsingRabbitMq(cfg=>
{
IRabbitMqHost host=cfg.host(新Uri(RabbitMQConstants.RabbitMQUri),
hst=>
{
Username(RabbitMQConstants.RabbitMQUserName);
密码(RabbitMQConstants.RabbitMQPassword);
});
cfg.ReceiveEndpoint(主机,
RabbitMQConstants.YourQueueName,
endPointConfigurator=>{
endPointConfigurator.Consumer();
endPointConfigurator.UseConcurrencyLimit(4);
});
});
busControl.Start();
公共类消费者:
消费者
{
公共异步任务使用(使用上下文)
{
wait Console.Out.WriteLineAsync($“消息已使用:{context.Message.YourValue}”);
}
}

看看masstransit项目:

它具有预取计数和并发限制等配置。它让您并行地使用消息

此外,设置非常简单:

IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    IRabbitMqHost host = cfg.Host(new Uri(RabbitMQConstants.RabbitMQUri),
        hst =>
        {
            hst.Username(RabbitMQConstants.RabbitMQUserName);
            hst.Password(RabbitMQConstants.RabbitMQPassword);
        });

    cfg.ReceiveEndpoint(host,
        RabbitMQConstants.YourQueueName,
        endPointConfigurator => { 
            endPointConfigurator.Consumer<SomeConsumer>();
            endPointConfigurator.UseConcurrencyLimit(4);
        });
});

busControl.Start();

public class SomeConsumer :
    IConsumer<YourMessageClass>
{
    public async Task Consume(ConsumeContext<YourMessageClass> context)
    {
        await Console.Out.WriteLineAsync($"Message consumed: {context.Message.YourValue}");

    }
}
IBusControl busControl=Bus.Factory.CreateUsingRabbitMq(cfg=>
{
IRabbitMqHost host=cfg.host(新Uri(RabbitMQConstants.RabbitMQUri),
hst=>
{
Username(RabbitMQConstants.RabbitMQUserName);
密码(RabbitMQConstants.RabbitMQPassword);
});
cfg.ReceiveEndpoint(主机,
RabbitMQConstants.YourQueueName,
endPointConfigurator=>{
endPointConfigurator.Consumer();
endPointConfigurator.UseConcurrencyLimit(4);
});
});
busControl.Start();
公共类消费者:
消费者
{
公共异步任务使用(使用上下文)
{
wait Console.Out.WriteLineAsync($“消息已使用:{context.Message.YourValue}”);
}
}

有一个cosumer将每条消息传递给工作线程。有一些示例代码吗?有一个cosumer将每条消息传递给工作线程。有一些示例代码吗?