gpt4 book ai didi

.net - NET的RabbitMQ

转载 作者:行者123 更新时间:2023-12-03 12:55:37 24 4
gpt4 key购买 nike

我一直在尝试创建.NET RabbitMQ消费者应用程序,有些问题无法通过google找到答案,所以我想我应该在这里问他们:

  • 在规范中,我发现IModel返回的IConnection.CreateModel实例不是线程安全的。这是否仅与调用IModel.BasicPublish方法有关(如果我理解正确,则BasicPublish/BasicAck/BasickNack/ets不是线程安全的),或者这还包括已注册的使用者?换句话说,在IModel.HandleBasicDeliver周围使用相同的锁是否足够?或者我还必须使用相同的锁来包装IBasicConsumer.HandleBasicDelivery的主体吗?
  • IModel.BasicConsume有一个 bool 参数noAck,我找不到任何帮助。将此参数设置为True是否意味着通过IBasicConsumer.HandleBasicDeliver传递消息时不会进行自动确认?如果我将其设置为False,那么RabbitMQ .Net库将自动为所有接收到的消息发送Ack。
  • IBasicConsumer方法调用是否已序列化?换句话说,在已经由IBasicConsumer.HandleBasicDeliver处理消息的情况下,会调用IBasicConsumer.HandleBasicDeliver吗?
  • 最佳答案

    In other words is it sufficient to use the same lock around IModel.HandleBasicDeliver or do I also have to have use the same lock to wrap the body of IBasicConsumer.HandleBasicDelivery?



    通常,我会避免对RabbitMQ .NET客户端API的多线程访问。我建议您在他们自己的流程中运行多个使用者。我已经在博客上详细介绍了 here。要回答您的问题,如果 必须允许多个线程访问该进程,则无论您使用的是什么实现(IModel,IBasicConsumer等),我都会锁定该函数。记住; IModel本身不是线程安全的,因此也不是其任何实现。

    If I set it to False then the RabbitMQ .Net library will automatically send Ack(s) for all received messages?



    不,不会。在这种情况下,您需要手动发送确认。除非发送确认,否则消息将保留在队列中。

    Are the IBasicConsumer methods calls serialized? In other words will IBasicConsumer.HandleBasicDeliver be called while a message is already being handled by IBasicConsumer.HandleBasicDeliver?



    我假设您正在询问是否按顺序依次调用,而不是将序列化作为将C#对象转换为标记的过程。在这种情况下,答案是肯定的,调用将按顺序处理,并且不会重叠。消费者可以利用QOS属性来确定他们一次阅读的消息数。即使具有较高的QOS值,使用者仍将顺序处理消息。同样,请参阅上面的链接以获取更多详细信息。

    关于.net - NET的RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783627/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com