.Net Core-具有不同响应回调的多个服务请求

时间:2019-12-19 18:18:12

标签: c# asp.net-core asynchronous callback microservices

所以我目前正在开发一个Web应用程序(.NET Core 2.1),该应用程序向一个服务发出多个异步请求。

我正在使用JavaScript制定并提出请求,稍后将由我指定的控制器/方法接收该请求:

JavaScript requests

Methods in controller

控制器中的每个功能之一都向服务发送请求。

服务完成请求处理后,将在Web应用程序中触发一个回调函数,我可以在其中访问响应并将其发送回我的客户端:

Callback function

我的问题是我的请求中的每个请求都有一个不同的响应回调,因此我需要等待它被调用,然后才能继续获取响应值并将其返回给我的客户端。

因为请求是异步的,所以我尝试实现线程,并使用ManualResetEvent / AutoResetEvent使线程等待回调被触发,然后在分配响应后释放它们;但是,我这样做并没有成功,因为每当我停止阻塞其中一个线程以让下一个线程运行并到达其回调时,就不会成功。所有线程都被释放,导致在有机会填充返回的对象之前触发控制器方法中的“返回”(之后触发回调,我已将响应发送给客户端,导致对为空/空)。

关于如何解决这个问题的任何想法?

整个过程是:

1)客户端创建一个请求并将其发送到RabbitMQ。

2)Rabbit获取请求并将其发送到侦听该类型请求的任何服务。

3)服务拾取请求,处理请求,创建响应对象并将其发送到Rabbit。

4)Rabbit获取响应并将其发送给所有侦听该类型响应的客户端。

5)我的客户端(侦听该类型的响应)通过回调方法获取响应,然后我可以返回服务发送的任何值。

1 个答案:

答案 0 :(得分:0)

您必须集成这两个调用。它们可以作为单个API方法集成到您的控制器中。此外,您还可以在前端进行操作,只需使用promises即可。 如果一项任务取决于另一项任务的结果,则使用线程将没有任何优势。由于第二个直到第一个返回结果时才运行,因此它们将同步执行。 您有两个示例可以做到这一点:

c#例如:

this.postlist.size()

js例如:

> 0