什么是 Service Bus 等同于 MSMQ 的 CanRead?

What is Service Bus's equivalent to MSMQ's CanRead?

我正在将一个使用 MSMQ 的应用程序转换为使用带有适配器的接口,而不是可以处理 MSMQ 或服务总线(本地或 Azure 版本)队列。 MSMQ 的应用程序用途之一是配置检查器功能,以确定系统是否具有执行某些操作的适当权限。它使用 System.Messaging.MessageQueue.CanRead 来验证我们是否可以成功读取对应用程序很重要的给定队列(这是客户经常发生的安全配置错误)。

服务总线中最好的等效项对我来说并不明显。我对一种方法的第一个想法是尝试 QueueClient.Peek() 并捕获任何随后发生的异常。 Peek 方法不提供超时参数,所以我只能希望这会很快发生。我更愿意使用超时,这样我可以在当前没有消息可读的可能情况下强制它快速 return。 Receive(TimeSpan serverWaitTime) 我可以在其中等待很短的时间,但我认为这需要我使用事务并在我碰巧收到消息时中止它。当我不想这样做时,这会锁定队列。

我希望有一个我错过的更好的选择。

创建MessageReceiver时需要指定命名空间的连接字符串+sas key。如果您提供的 sas 密钥不允许对队列进行读取权限,则会出现异常。