我有一个dotnet core 3.1 web api应用程序。该应用程序是一个网关,用于公开通过服务总线(队列、主题)进行通信的各种其他服务。我们使用服务总线在服务之间进行异步消息传递。我不想在网关和其他服务之间进行任何同步通信。
因此,我正在尝试找到一种在控制器中接收请求的方法,例如,创建资源并将命令发送到服务总线,然后坐下来等待。
同时,服务会将命令保存到db并发出事件。网关正在侦听topic以接收消息,现在,我需要以某种方式将该消息传递回控制器中的请求,该请求正在等待该消息完成其自身的执行。
发布于 2020-05-10 07:38:25
据我所知,您不能通过在控制器中直接向前等待来知道处理程序的执行是否已经正确完成(就像您的情况一样),但是,也许您可以做一些工作。
正如您所知道的,Service bus有一个队列或主题,侦听器可以在其中获取发送的消息。但它也有一个DeadLetter,如果发生任何未处理的异常,错误的消息将被排回队列,任何消息都有一个内部Id,或者您的自定义正文也有一个Id,您可以用它来跟踪它,并在队列或主题中查找它。也许这可以解决您的问题,但这根本不是效率,因为这不是这种服务所希望的功能,因为实际上,他的功能是让您知道您的消息已经排队,然后您应该跟踪您的执行并在您的服务中处理消息。
发布于 2020-05-10 07:47:11
您正在异步创建资源,因此不要试图给出同步行为的外观。从您的API请求中返回HTTP状态代码202,并让客户端稍后查询创建的资源。
https://stackoverflow.com/questions/61697671
复制相似问题