加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 重载asp.net MVC Web API应用程序和异步消息总线

发布时间:2020-12-16 06:22:18 所属栏目:asp.Net 来源:网络整理
导读:我打算构建一个相当大的应用程序(在并发用户/请求数量方面很大,而不是在功能方面). 基本上,我将在某处提供服务,即等待命令执行它们,并在稍后确认完成.在发出确认消息之前,此服务将使用服务总线进行通信,最终执行. 这项服务的消费者可以是任何类型的应用程序(
我打算构建一个相当大的应用程序(在并发用户/请求数量方面很大,而不是在功能方面).

基本上,我将在某处提供服务,即等待命令执行它们,并在稍后确认完成.在发出确认消息之前,此服务将使用服务总线进行通信,最终执行.

这项服务的消费者可以是任何类型的应用程序(WPF,SL,…)但我的主要(和第一)客户端将是asp.net MVC应用程序WebApi(.Net 4.5)或仅MVC(.Net 4.0)使用ajax控制器操作.

Web应用程序将依赖于Ajax调用来保持用户友好的响应应用程序.

我对这种全面的异步架构很陌生,我有一些问题可以避免将来的头痛:

>我的网络API呼叫可能需要一些时间.我应该如何正确设计api以支持长时间运行(某种异步?).我已经阅读了关于新的异步关键字,但为了知识,我想了解背后的内容.
>我对服务的调用包括发布消息并等待确认消息.如果我用一个方法包装它,我应该怎么写这个方法?我应该“阻止”直到收到确认(我想我不应该)?我应该返回一个Task对象并让消费者决定吗?
>我也想知道SignalR是否可以帮助我.使用signalR,我想我可以使用真正的“fire and forget”命令发出,并路由到客户端ack消息.
>我是否完全脱离了主题,我应该采取另一种方法吗?

在实施细节/框架方面,我想我将使用:

> Rabbitmq作为消息系统
> Masstransit抽象邮件系统
> asp.MVC 4构建UI
> Webapi隔离从UI控制器发出的命令,并允许其他类型的客户端发出命令

解决方法

my web api calls can take some amount of times.
How should I design properly the api to support long
running operations (some kind of async?).

我不是100%肯定你要去哪里.您可以通过投入RabbitMQ和MassTransit来询问有关Async的问题,还可以提及消息排队.默认情况下,消息队列是异步的.

您还提到了执行命令.如果您指的是CQRS,则需要分离命令和查询.但是当我提到“长时间运行的流程”时,我所指的并不是100%.

>查询数据时,数据应该已经存在.优选地以手头问题所需的方式.
>查询数据时,不应启动长时间运行的进程
>执行命令时,可以启动长时间运行的进程.但这就是你应该使用消息队列的原因.指定一个任务来启动长时间运行的进程,为它创建一条消息,将其抛入队列,完全忘记它.后台的其他一些过程会把它拿起来.
>执行该命令时,可以启动长时间运行的进程.
>执行命令时,可以使用数据更新数据库
>如果有人请求数据,API可以使用此数据

使用此模型时,长时间运行过程可能需要长达10分钟才能完成.我不会详细说明实际上单个线程需要花费10分钟才能完成,包括锁定数据库,但我希望你明白这一点.将消息投入队列后,您的API几乎可以立即免费使用.那里不需要Async.

My calls to the service will consist is publishing a message and wait for the ack message.

我不懂. .NET Framework和您的排队平台将为您解决此问题.你为什么要等待确认?

在MassTransit

Bus.Instance.Publish(new YourMessage{Text = "Hi"});

在NServiceBus中

Bus.Publish(new YourMessage{Text = "Hi"});

I’m also wondering if SignalR can help me.

我应该这么认为!由于消息传递的异步性质,用户必须“等待”更新.如果您可以通过SignalR向用户“推送”更新来提供此数据,那就更好了.

Am I completely out of subject,and should I take another approach?

也许,我仍然不确定你要去哪里.
也许阅读以下资源.

资源:

http://www.udidahan.com/2013/04/28/queries-patterns-and-search-food-for-thought/
http://www.udidahan.com/2011/10/02/why-you-should-be-using-cqrs-almost-everywhere%E2%80%A6/
http://www.udidahan.com/2011/04/22/when-to-avoid-cqrs/
http://www.udidahan.com/2012/12/10/service-oriented-api-implementations/

http://bloggingabout.net/blogs/dennis/archive/2012/04/25/what-is-messaging.aspx
http://bloggingabout.net/blogs/dennis/archive/2013/07/30/partitioning-data-through-events.aspx
http://bloggingabout.net/blogs/dennis/archive/2013/01/04/databases-and-coupling.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读