Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/46.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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 通过事件网格从Azure函数传递HTTP请求_Node.js_Azure_Azure Functions_Azure Eventgrid - Fatal编程技术网

Node.js 通过事件网格从Azure函数传递HTTP请求

Node.js 通过事件网格从Azure函数传递HTTP请求,node.js,azure,azure-functions,azure-eventgrid,Node.js,Azure,Azure Functions,Azure Eventgrid,我已经开始考虑一个基于Azure函数和事件网格构建的系统的原型架构 我想要实现的是有一个单一的入口点(函数),各种外部供应商将向其发送Webhook(GET)HTTP请求。该函数的目的是向有效负载添加一些元数据,并将包(来自供应商的元数据+原始有效负载)发布到事件网格中。然后,事件网格将触发另一个函数,其目的是用状态204 HTTP代码响应原始Webhook HTTP请求 下图是架构的简化版本,事件网格当然也会将事件发布到其他函数,但为了简单起见 我目前面临的挑战是,在触发第一个函数后,来自外部

我已经开始考虑一个基于Azure函数和事件网格构建的系统的原型架构

我想要实现的是有一个单一的入口点(函数),各种外部供应商将向其发送Webhook(GET)HTTP请求。该函数的目的是向有效负载添加一些元数据,并将包(来自供应商的元数据+原始有效负载)发布到事件网格中。然后,事件网格将触发另一个函数,其目的是用状态204 HTTP代码响应原始Webhook HTTP请求

下图是架构的简化版本,事件网格当然也会将事件发布到其他函数,但为了简单起见

我目前面临的挑战是,在触发第一个函数后,来自外部供应商的原始Webhook HTTP请求的上下文丢失。尝试将上下文作为事件负载的一部分发送到事件网格感觉像是一种反模式,不管怎样,我都无法让它工作(事件中的某个地方丢失了
.done()
函数)。尝试在上一个函数中仅使用
context.res={}
context.done()
将不会响应供应商的原始HTTP请求

有什么想法吗?整个架构只是一个大的反模式吗?它会工作吗?或者我必须在由供应商请求触发的第一个函数中立即发送HTTP响应吗

谢谢大家!!

您混合了两种不同的模式,例如消息驱动和事件驱动。 Azure事件网格是一种分布式发布/订阅事件推送模型,其中订阅者以松散解耦的方式订阅源上的兴趣

在您的场景中,您希望以同步方式在消息交换请求-响应模式中使用事件模型。请求消息交换上下文不能通过发布/订阅事件模型流回到匿名端点,例如响应消息的实际点

但是,如何“逻辑地”集成这两种不同的模式有几个选项,下面展示了其中的一些选项:

  • 使用请求-回复到消息交换模式,例如全双工通信,一个用于请求,另一个用于回复到

  • 使用带有轮询状态的请求-响应消息交换模式。基本上,您的第一个函数将等待订户状态,然后返回调用方。在分布式internet体系结构中,我们可以使用azure lease blob存储在同步部分和异步事件部分之间共享状态。 在您的场景中,第一个AF将创建此租约blob,然后向AEG触发一个事件,然后它将定期轮询租约blob中的状态以结束聚合过程(多个订阅者等)

    此外,对于这种模式,您可以使用简化与事件驱动AEG模型的集成

  • 下面的屏幕片段显示了一个序列图,它使用Azure租约Blob在分布式模型中共享“请求状态”。请注意,此伪同步/异步模式适用于在短时间内处理请求响应(小于60秒)的情况


    有关在Azure功能中使用租赁Blob的更多详细信息,请参阅我的答案。

    您混合了两种不同的模式,例如消息驱动和事件驱动。 Azure事件网格是一种分布式发布/订阅事件推送模型,其中订阅者以松散解耦的方式订阅源上的兴趣

    在您的场景中,您希望以同步方式在消息交换请求-响应模式中使用事件模型。请求消息交换上下文不能通过发布/订阅事件模型流回到匿名端点,例如响应消息的实际点

    但是,如何“逻辑地”集成这两种不同的模式有几个选项,下面展示了其中的一些选项:

  • 使用请求-回复到消息交换模式,例如全双工通信,一个用于请求,另一个用于回复到

  • 使用带有轮询状态的请求-响应消息交换模式。基本上,您的第一个函数将等待订户状态,然后返回调用方。在分布式internet体系结构中,我们可以使用azure lease blob存储在同步部分和异步事件部分之间共享状态。 在您的场景中,第一个AF将创建此租约blob,然后向AEG触发一个事件,然后它将定期轮询租约blob中的状态以结束聚合过程(多个订阅者等)

    此外,对于这种模式,您可以使用简化与事件驱动AEG模型的集成

  • 下面的屏幕片段显示了一个序列图,它使用Azure租约Blob在分布式模型中共享“请求状态”。请注意,此伪同步/异步模式适用于在短时间内处理请求响应(小于60秒)的情况


    有关在Azure功能中使用租赁Blob的更多详细信息,请参阅我的答案。

    Roman,非常感谢您的详细解释!持久的功能肯定会有助于架构的发展,因此感谢您的链接。Roman,非常感谢您的详细解释!持久的功能肯定会有助于架构的开发,因此感谢您的链接。