Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js REST API异步消息包装器_Node.js_Rest_Express_Asynchronous_Microservices - Fatal编程技术网

Node.js REST API异步消息包装器

Node.js REST API异步消息包装器,node.js,rest,express,asynchronous,microservices,Node.js,Rest,Express,Asynchronous,Microservices,给定一个具有异步消息传递的事件驱动微服务体系结构,有什么解决方案可以实现“同步”REST API包装器,从而使对REST接口的请求在向客户端发送响应之前等待响应事件的发布 示例:POST/api/articles 在内部,这将在服务层中发送一个CreateArticleEvent,最终期望响应中包含持久化项目的ID的ArticleCreatedEvent 只有这样,REST接口才会使用此ID响应最终客户机 处理多个同时请求-在REST api层中保留一个由相关标识符键入的机上请求内存映射在概念上

给定一个具有异步消息传递的事件驱动微服务体系结构,有什么解决方案可以实现“同步”REST API包装器,从而使对REST接口的请求在向客户端发送响应之前等待响应事件的发布

示例:POST/api/articles

在内部,这将在服务层中发送一个CreateArticleEvent,最终期望响应中包含持久化项目的ID的ArticleCreatedEvent

只有这样,REST接口才会使用此ID响应最终客户机

处理多个同时请求-在REST api层中保留一个由相关标识符键入的机上请求内存映射在概念上是可行的方法吗


在一段时间后,我们如何处理超时请求?

通常您不需要维护飞行中请求的映射,因为这基本上是由node.js的http库为您完成的

只需按预期使用express,这可能是您永远不必担心的事情,只要您避免任何全局状态


如果你想建立一个更奇怪的模式,但不知道如何解决它。分享一个简单的例子可能会有所帮助。重建和避免全局状态并不难。

使用express,您尝试过中间件吗?在文章创建之后,您可以将一系列回调函数链接到一个特定的超时时间。

我假设您在的上下文中?如果是这样,我建议您不要将CreateArticleEvent发布到事件存储,而是直接在数据库中创建文章,然后将ArticleCreatedEvent发布到事件存储

你为什么问?通常,创建此模式是为了协调不同的微服务。在上面链接中显示的示例中,它用于协调客户服务在创建订单时的反应。注意过去时态。订单服务创建了订单,客户服务对此做出反应

在您的情况下,只需将订单插入数据库(通过直接调用ArticleService)并使用文章ID进行响应就更容易(而且可能更好)。然后只需将ArcTileCreateEvent发布到您的事件存储中,即可触发其他可能想要侦听它的微服务(例如,触发一个通知给编辑进行审查)


事件源是一种很好的模式,但我们不需要将其应用于所有内容。

CreateArticleCommand
而不是
CreateArticleEvent
ID不是GUID?您需要外部包装器(另一台机器、API网关等)还是内置包装器?