我计划构建一个相当大的应用程序(在并发用户/请求数量方面很大,而不是在功能方面)。
基本上,我会在某处提供服务,即等待命令执行它们,并在稍后确认完成。在发出确认消息之前,该服务将使用服务总线进行通信,最终执行。
此服务的使用者可以是任何类型的应用程序(WPF、SL、...),但我的主要(也是第一个)客户端将是一个 asp.net MVC 应用程序 + WebApi (.Net 4.5) 或仅 MVC (.Net 4.0) ) 与 ajax 控制器动作。
Web 应用程序将依赖 Ajax 调用来保持用户友好的响应式应用程序。
我对这种成熟的异步架构很陌生,我有一些问题可以避免未来的头痛:
- 我的 web api 调用可能需要一些时间。我应该如何正确设计 api 以支持长时间运行的操作(某种异步?)。我已经阅读了新的 async 关键字,但为了知识,我想了解其背后的内容。
- 我对服务的调用将包括发布消息并等待确认消息。如果我将它包装在一个方法中,我应该如何编写这个方法?我应该“阻止”直到收到确认(我想我不应该)?我应该返回一个 Task 对象并让消费者决定吗?
- 我也想知道 SignalR 是否可以帮助我。使用 signalR,我想我可以使用真正的“即发即弃”命令发出,并路由到客户端以确认消息。
- 我是否完全脱离主题,我应该采取另一种方法吗?
在实现细节/框架方面,我想我会使用:
- Rabbitmq 作为消息系统
- Masstransit 抽象消息系统
- asp.MVC 4 构建 UI
- Webapi 隔离从 UI 控制器发出的命令,并允许其他类型的客户端发出命令