取消Azure服务总线QueueClient长时间运行的Receive

本文关键字:运行 Receive 长时间 QueueClient Azure 服务 总线 取消 | 更新日期: 2023-09-27 18:17:41

我正在编写一个测试程序来处理Azure服务总线队列中的消息。我希望能够提供启动和停止退出队列功能的能力。

如果我想知道是否有办法取消调用QueueClient.Receive(TimeSpan)?有一个QueueClient.Abort()方法,还有一个QueueClient.Close()方法,但是关于这些方法的文档很少。而且,在终止或关闭后似乎没有相应的方法来"打开"。

如果没有办法取消长时间运行的接收,那么我就只能使用短(或没有)的TimeSpan,以便让用户有机会停止退出队列。通过这样做,我几乎是在自己进行轮询,这就破坏了长时间运行接收功能的优势。

我是使用服务总线队列的新手,所以也许我在这里使用的方法是错误的,并且不理解队列中的消息应该如何处理的精神?

取消Azure服务总线QueueClient长时间运行的Receive

关闭创建队列客户端的消息工厂,接收器将中止。关闭消息传递工厂将删除到服务总线服务的连接。请注意,从工厂创建的其他MessagingEntities也是关闭的,因此为接收循环使用专用工厂。

var myFactory = MessagingFactory.FromConnectionString(...);
myFactory.Close();

根据我的经验,QueueClient上的Abort方法有时不会在合理的时间段内中止实际的接收操作。

要重新开始接收,您需要从新的MessagingFactory创建一个新的QueueClient。

设计的解决方案确实是关闭客户端。

可能在它自己的后台线程上有这个调用,您可以简单地杀死线程本身。侧点,您应该先关闭QueueClient对象。

当你准备好再次接收时,创建一个新的实例,并开始你的后台线程