1

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

1) 只是想了解有关 ServiceBus 队列的“OnMessage”功能的更多详细信息。据我了解,根据文档和我的测试,这不是具有 Sleep() 间隔的典型 while()/Receive() 循环,但实际上更多的是基于“推送”的方法。所以我的问题是,如果我将“AutoRenewTimeout”设置为 1 分钟,那么在发出新的 Receive() 操作之前等待接收消息的那 1 分钟的线程会发生什么情况。它是否休眠并等待来自 ServiceBus 的消息被“推送”到它?还是这里更像是一种异步方法,其中一个线程被释放回池中,并且只有在消息到达我设置的 1 分钟 AutoRenewTimeout 窗口的 47 秒时才再次抓取以工作?(不,我不是在说“

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

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

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

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

感谢您花时间和精力阅读本文。如有必要,我很乐意澄清任何一点。Abhishek,您似乎是 SB 的建筑师之一,所以如果您看到这篇文章,如果您能发表一些评论,我将不胜感激:)

谢谢!

4

0 回答 0