IHostedService 中的 Rabbit MQ 线程安全

问题描述 投票:0回答:0

我有三个 c# 类。

rabbitmq 订阅者有一个 connect() 方法、subscribe(Action messageHandler) 方法和一个 Ack(ulong messageId) 方法。该类实例化为单例,通过DI

传给下面两个类

在 rabbitmq 订阅者上调用 connect() 和 subscribe() 的 IHostedService。它还引用了一个工作流类,一个通过 DI 传入的单例。此托管服务从不确认消息;当从队列中接收到消息时,它只是将消息传递给工作流类。

第三类是一个工作流类,它从 IHostedService 获取消息并将其传递给一系列 TPL 数据流块,最后一个调用在 rabbitmq 订阅者上确认。 tpl 数据流管道永远不会完成,因为它的目的是通过 IHostedService 保持活动状态。 IHostedService 对通过工作流的消息一无所知,这就是工作流类具有对 rabbit mq 订阅者的引用的原因。它需要在处理完成时确认消息。

rabbit mq 文档指定底层通道不应被多个线程使用。我怎样才能改变我的设计,使我遵守 rabbit mq 的单线程规则?

这是文档。

https://www.rabbitmq.com/dotnet-api-guide.html#concurrency

c# multithreading asp.net-core rabbitmq tpl-dataflow
© www.soinside.com 2019 - 2024. All rights reserved.