Rest 用于长时间操作的http接口

Rest 用于长时间操作的http接口,rest,msmq,nservicebus,Rest,Msmq,Nservicebus,我有一个正在运行的系统,它使用基于Agatha RRSL的请求-响应接口处理短期和长期运行的操作 现在我们想做一些修改,以便能够通过Json格式的网站发送请求,所以我尝试了许多支持Json的REST服务器实现。 REST服务器是由Topshelf处理的一个模块或“搁置”,另一个模块是处理模块,最后一个模块是NoSQL数据库运行器模块 在REST和处理模块之间,我考虑的是servicebus,但我们有两种类型的请求:在1-2秒内执行工作的短请求和在1分钟内执行工作的长请求 servicebus是这

我有一个正在运行的系统,它使用基于Agatha RRSL的请求-响应接口处理短期和长期运行的操作

现在我们想做一些修改,以便能够通过Json格式的网站发送请求,所以我尝试了许多支持Json的REST服务器实现。 REST服务器是由Topshelf处理的一个模块或“搁置”,另一个模块是处理模块,最后一个模块是NoSQL数据库运行器模块

在REST和处理模块之间,我考虑的是servicebus,但我们有两种类型的请求:在1-2秒内执行工作的短请求和在1分钟内执行工作的长请求

servicebus是这项工作的正确选择吗?我正在考虑为长时间运行的op返回一个“响应”,其中包含一个令牌,该令牌可用于请求新请求的操作状态和结果。问题是,为了完成http响应,大部分请求必须像同步请求一样使用

我想当我必须返回大量对象列表时,我在响应大小(在MSMQ消息传输上)方面也有问题


有什么提示吗?

NServiceBus并不真正适合于请求-响应消息传递模式。它更适合异步发布-订阅

编辑:为了实现一种请求-响应,您需要在两个方向发送消息,但包含三个逻辑步骤:

  • 因此,您的客户机会发送一条请求数据的消息
  • 服务器将接收消息,对其进行处理,用数据构造返回消息,并将其发送给客户端
  • 然后,客户机可以处理数据 因为这些步骤中的每一个都是以异步方式独立进行的,所以在客户端发送请求和接收响应之间不可能强制执行有意义的SLA或超时。但是,对于可能需要几分钟才能完成的大型处理作业来说,这非常有效

    另外,两条消息中都需要有一个公共值,用于将请求与响应联系起来。否则,客户端可能会发送多个请求,并接收多个响应,而不知道哪个响应是针对哪个请求的

    因此,您可以使用NServiceBus实现这一点,但这需要更多的思考


    此外,NServiceBus使用MSMQ作为底层传输,而不是http

    听起来像是HTTP 202的例子。那么你的提示是什么?长时间后返回大量数据(可能1-2MB)的处理模块如何与之对话?这两个模块也不能在同一台服务器上。已在上面扩展了我的答案。MSMQ的最大消息大小为4MB。这是2MB Unicode字符。NServiceBus具有请求/响应语义的内置关联,您可以在AsyncPages示例中看到如何非常轻松地将其集成到ASP.NET管道中。此外,NServiceBus允许您将端点公开为常规web/wcf服务,以便它可以接受来自任何和所有客户端的消息。