0

我使用Azure的环境和发展.NET管理多个Azure的服务总线队列同时

我运行一个Web应用程序(ClientApp),其采用的客户端数据进行一系列的计算。这些计算是性能密集型的,因此它们在单独的Web应用程序(CalcApp)上运行。

当前,ClientApp将计算请求发送到CalcApp。来自每个客户的请求都被放入一个公共队列,并且每次运行一个FIFO。我的目标是为每个客户创建单独的队列并同时运行几个计算。

我想使用Azure服务总线队列来实现这一点。在ClientApp上,服务总线将检查该客户端的现有队列,并在需要时创建一个队列。在CalcApp上,应用程序会定期检查现有的队列。如果它找到一个新的队列,那么它会创建一个新的QueueClient,它使用OnMessageAsync()和RunCalculationsAsync()作为回调函数。

这是可行的,甚至是一个好主意?

回答

0

我会考虑使用多个消费者,而不是使用多个消费者,如果您需要区分基于哪个客户端来源的处理类型,可能会使用表示“客户端”的主题。每个客户可以在队列中添加一个条目,并且消费者可以在消息上“斗争”。如果遵循这种方法,则不会有两次处理同一消息的机会。

我不确定有多个队列是必要的。

以下是有关竞争消费者模式的更多信息。
https://msdn.microsoft.com/en-us/library/dn568101.aspx

你也可以建立一个消费者并产生多个线程。在这个模型中,你将有一个队列和一个消费者,但仍然能够一次计算多个队列。但最终,竞争的消费者更具可扩展性,并结合使用这两种策略。

+0

我仍然能够处理这种模式的重复检测?通过混合计算按钮,可能让客户非常不耐烦。 – clenard

+0

通过重复我假设你的意思是在一个特定的客户端的用户多次请求计算,并且同一事件的多条消息登陆队列。 Azure构建了可以配置的重复检测。或者,您可以使用持久存储来了解任务是否已完成。您可以创建一个SQL表,DocumentDB等,在过程开始时检查这种情况。在这个过程结束时,为这个值加上标记,以便下一个需要处理的消费者知道它已经完成。 – DanielG

+0

有关原生重复检测的信息:http://blog.iquestgroup.com/en/windows-azure-service-bus-duplicate-detection/#.Vnl7CblIjmF – DanielG

相关问题