C# RabbitMQ在同一进程中有多个使用者
我有一个.NET项目需要读取给定队列中的消息。 我有几个生产者将相同类型的消息写入队列。 我希望我的消费者应用程序有几个线程读取消息并处理它们,这样负载就不会在单个线程上 关于如何实现这一点,有什么想法或示例代码吗? 请再次注意:C# RabbitMQ在同一进程中有多个使用者,c#,rabbitmq,C#,Rabbitmq,我有一个.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将每条消息传递给工作线程。有一些示例代码吗?