取消长期运行接收的Azure Service Bus QueueClient?

时间:2013-06-08 00:27:22

标签: c# azure servicebus

我正在编写一个测试程序来处理Azure Service Bus Queue中的消息。我希望能够提供启动和停止出列功能的能力。

如果我想知道是否有办法取消对QueueClient.Receive(TimeSpan)的调用?有一个QueueClient.Abort()方法,还有一个QueueClient.Close()方法,但这些方法的文档很稀疏。并且,在中止或关闭之后似乎没有相应的“打开”方法。

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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