我正在以发布/订阅模式使用 Azure 服务总线主题。我有一个主题和两个订阅。一种用于网站,一种用于网络作业。当仅运行一个网站实例时,这可以正常工作。
当 Azure 扩展到两个实例时,两个 webjob 实例仍然使用相同的订阅,因此任何一条消息仅由其中一个实例处理,这正是我想要的。
但是网站也是如此,这不是我想要的。两个网站实例都需要接收所有消息,因此需要自己的订阅。
有没有办法获取网站的“实例”名称并动态进行订阅(并在网站缩减时再次删除订阅)?
我可以创建一个名为 %HOSTNAME%-web 或类似名称的订阅。但是当不再需要时我该如何删除它们呢?
最佳答案
如果您希望所有实例都收到消息的副本,那么正如您所说,您将需要重构,以便每个实例创建自己的订阅。
要实现“ volatile ”队列,请查看 QueueDescription 参数“AutoDeleteOnIdle”。 http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.messaging.queuedescription.autodeleteonidle.aspx这应该可以让您接近您要查找的内容,只需小心将 TimeSpan 设置为确保您不会错过消息的持续时间即可。
或者,如果您只预见扩展到几个实例,您可以适本地设置消息的生存时间,并将队列保留在适当的位置,以便下次“扩展”时重用(尽管使用主机这个名字可能不是一个好主意)。根据消息量,与开发替代方法所需的时间成本相比,成本可能很小。
关于自动缩放网站的 Azure 服务总线订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414211/