http接口用于长时间操作

时间:2011-09-09 07:03:30

标签: rest msmq nservicebus

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

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

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

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

当我必须返回庞大的对象列表时,我认为我的响应大小(在MSMQ消息传输上)也存在问题

任何提示?

1 个答案:

答案 0 :(得分:1)

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

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

  1. 因此您的客户端会发送请求数据的消息。
  2. 服务器将接收消息,处理消息,构造带有数据的返回消息,并将其发送到客户端。
  3. 然后客户端可以处理数据。
  4. 由于这些步骤中的每一步都是以隔离方式和异步方式进行的,因此在客户端发送请求和接收响应之间不会强制执行有意义的SLA或超时。但这适用于大型处理工作,可能需要几分钟才能完成。

    此外,两个消息中都需要存在可用于将请求与响应联系起来的公共值。否则,客户端可以发送多个请求,并接收多个响应,并且不知道哪个响应针对哪个请求。

    所以你可以用NServiceBus做到这一点,但需要更多的思考。

    NServiceBus也使用MSMQ作为底层传输,而不是http。