Azure 几个特定的ServiceBus问题:自动恢复超时、筛选、删除订阅、Peek和LockMode

Azure 几个特定的ServiceBus问题:自动恢复超时、筛选、删除订阅、Peek和LockMode,azure,azureservicebus,servicebus,azure-servicebus-queues,azure-servicebus-topics,Azure,Azureservicebus,Servicebus,Azure Servicebus Queues,Azure Servicebus Topics,我有几个与服务总线相关的具体问题,我想了解更多。我读过很多博客,以及很多关于Service Bus(SB)的文档,并且已经实现了一个使用它的解决方案。我将要问的问题,如何没有得到回答,或者回答得不清楚,这就是为什么我想更深入地了解细节。所以,他们来了: 1) 只是想了解关于ServiceBus队列的“OnMessage”函数的更多细节。据我所知,这不是一个典型的while()/Receive()循环,具有Sleep()间隔,但根据文档和我的测试,实际上更多的是一种基于“推”的方法。因此,我的问题

我有几个与服务总线相关的具体问题,我想了解更多。我读过很多博客,以及很多关于Service Bus(SB)的文档,并且已经实现了一个使用它的解决方案。我将要问的问题,如何没有得到回答,或者回答得不清楚,这就是为什么我想更深入地了解细节。所以,他们来了:

1) 只是想了解关于ServiceBus队列的“OnMessage”函数的更多细节。据我所知,这不是一个典型的while()/Receive()循环,具有Sleep()间隔,但根据文档和我的测试,实际上更多的是一种基于“推”的方法。因此,我的问题是,如果我将“AutoRenewTimeout”设置为1分钟,那么在发出新的Receive()操作之前等待消息接收的线程在这1分钟会发生什么情况。它是否睡眠并等待来自ServiceBus的消息被“推送”到它?或者这更像是一种异步方法,线程被释放回池中,只有在消息到达时(比如在我设置的1分钟AutoRenewTimeout窗口中47秒)才会再次抓取线程来执行工作?(不,我不是在这里谈论“OnMessageAsync”)我想这个问题涉及到实现SB的WCF的内部

2) 关于问题1),除了在这些时间间隔触发Receive()操作的明显成本外,将“AutoRenewTimeout”设置为5分钟、10分钟或60分钟还有什么意义?我猜从客户的角度来看,我触发接收操作的频率越低,对我来说就越经济划算,但从服务总线/应用程序的角度来看,在这段时间内“等待消息”,建议的“自动恢复超时”周期是什么?如果“AutoRenewTimeout”设置为1小时而不是1分钟,SB是否更容易断开连接?当“AutoRenewTimeout”更长时,是否有更多的资源/线程使用被耗尽?在我读过的任何帖子/博客/文档中,我都找不到任何明确的答案

3) 我在每台服务器上都部署了一个主题/订阅应用程序,它向主题发送/接收消息。现在,我不希望每个客户端(服务器)都接收它自己发送的消息,我只希望接收其他服务器(客户端)发送的消息。我能够使用SqlFilter()实现一个解决方案,但我想知道是否有其他/更好的方法来实现这一点?在谈到SqlFilters()时,使用简单的比较SqlFilter()时,对订阅客户端之间的消息传递速度有什么性能影响(如果有)?(我想我可以自己进行基准测试和查看,但我只是好奇地看一下内部)

4) 关于消息接收器上的PeekAndLock模式,如果在假设场景中,消息在SB端接收时被标记为已完成,则有人能够物理切断SB端和应用程序VM之间的连接,那么该消息将永远丢失,因为应用程序不会接收到它,然而,SB会将其视为已完成。我的理解是否正确,即在PeekAndLock模式下,消息被标记为已完成,而应用程序端没有收到消息的可靠保证

5) 关于删除一个主题的订阅,假设其中有100条从未收到的消息,这算是一个操作,还是101个操作

感谢您花时间和精力阅读本文。如有需要,我乐意澄清任何一点。阿披舍克,你似乎是SB的设计师之一,因此如果你看到这篇文章,如果你能发表一些评论,我将不胜感激:)

谢谢大家!