【问题标题】:Is manual acknowledgment of IModel thread-safe in RabbitMq .net client?在 RabbitMq .net 客户端中手动确认 IModel 线程安全吗?
【发布时间】:2019-12-01 11:40:36
【问题描述】:

.net Api guide 中所述,对IModel 实例的操作不是线程安全的。

根据经验,IModel 实例的使用不应超过 一个线程同时:应用程序代码应该保持清晰 IModel 实例的线程所有权概念。如果不止一个 线程需要访问特定的IModel 实例,应用程序 应该强制执行互斥本身。实现这一目标的一种方法是 供IModel 的所有用户锁定实例本身。

然后将代码示例显示为在发布时强制互斥的一种方式。

IModel ch = RetrieveSomeSharedIModelInstance();
lock (ch) {
  ch.BasicPublish(...);
}

到目前为止,一切都很好。然后解释了IModel操作序列化不正确的一些症状。但是他们指出,症状不限于这些操作。这句话的那部分确实在我们脑海中产生了一些问题。手动确认线程是否安全?在EventingBasicConsumerReceived 事件处理程序内部进行确认之前,我们是否必须使用一些锁?

打开了一些github issue 以澄清这一点,但他们没有找到答案,并建议 OP 在 SO 中提出问题,但我无法找到。

【问题讨论】:

    标签: c# .net rabbitmq thread-safety


    【解决方案1】:

    只有确认one message at a time 才会安全。我会尽可能避免完全共享频道。

    【讨论】:

    • 能否请您从那篇文章中添加确切的短语?
    • 明确规定:“根据经验,IModel 实例不应由多个线程同时使用”。
    猜你喜欢
    • 2012-08-14
    • 2019-03-20
    • 2015-12-19
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多