我使用Azure环境并在.NET中开发
我正在运行一个Web应用程序(ClientApp),它使客户端数据执行一系列计算。计算是性能密集型的,因此它们在单独的Web应用程序(CalcApp)上运行。
目前,ClientApp将计算请求发送到CalcApp。来自每个客户端的请求被放入一个公共队列,并一次运行一个FIFO。我的目标是为每个客户端创建单独的队列,并同时运行多个计算。
我正在考虑使用Azure Service Bus队列来完成此任务。在ClientApp上,服务总线将检查该客户端的现有队列,并在需要时创建一个队列。在CalcApp上,应用程序会定期检查现有队列。如果它找到一个新队列,那么它将创建一个新的QueueClient,它使用OnMessageAsync()和RunCalculationsAsync()作为回调函数。
这是可行的还是一个好主意?
答案 0 :(得分:0)
我会考虑使用多个使用者,如果您需要根据哪个客户端发起它来区分处理类型,可能会使用表示“客户端”的主题。每个客户端都可以在队列中添加一个条目,消费者可以对这些消息进行“斗争”。如果您遵循这种方法,则不可能两次处理相同的消息。
我不确定是否需要多个队列。
以下是有关竞争消费者模式的更多信息 https://msdn.microsoft.com/en-us/library/dn568101.aspx
您还可以构建一个使用者并生成多个线程。在此模型中,您将拥有一个队列和一个使用者,但仍然能够一次计算多个队列。但最终,竞争消费者的可扩展性更高,使用两种策略的组合。