我在发布/订阅模式中使用Azure服务总线主题。我有一个主题和两个订阅。一个用于网站,一个用于webjob。只运行一个网站实例时,这样可以正常工作。
当Azure扩展到两个实例时,两个webjob实例仍使用相同的订阅,因此任何单个消息仅由其中一个消息处理,这正是我想要的。
但对于不是我想要的网站也是如此。两个网站实例都需要接收所有消息,因此需要自己的订阅。
有没有办法为网站获取“实例”名称并动态进行订阅(并在缩小网站时再次删除订阅)?
我可以创建一个名为%HOSTNAME%-web的订阅或类似的东西。但是,如何在不再需要时将其删除?
答案 0 :(得分:1)
如果您希望所有实例都接收消息的副本,那么在您声明时,您将需要重构,以便每个实例创建自己的订阅。
实施" volatile"队列,查看QueueDescription参数" AutoDeleteOnIdle&#34 ;. http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.messaging.queuedescription.autodeleteonidle.aspx这应该让您接近您正在寻找的内容,只需注意将TimeSpan设置为确保您不会错过消息的持续时间。
另外,如果您只预见到扩展到几个实例,您可以恰当地设置消息的生命时间,并将队列留在原地,以便在下次放大时重新使用" (虽然使用主机名可能不是一个好主意)。根据消息量,与开发替代方法所需的时间成本相比,成本可能很小。