你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用 Azure 中继将事件从 Azure 事件网格接收到专用目标(例如本地服务器或虚拟机)中托管的 Webhook。
Azure 中继是一项服务,允许安全地向公有云公开位于企业网络内的服务,无需打开防火墙连接,也无需对企业网络基础结构进行彻底更改。
Azure 中继支持混合连接,这些连接是在现有 Azure 中继功能的基础上演进的安全开放协议,可在包含基本 WebSocket 功能(包括接受从 Azure 事件网格发起的中继流量的选项)的任何平台和任何语言中实现。 请参阅 Azure 中继混合连接协议指南 - Azure 中继。
将事件从事件网格基本资源接收到专用目标中的 Webhook
本部分提供了使用 Azure 中继将事件从事件网格基本资源接收到专用目标中托管的 Webhook 的大致步骤。
创建 Azure 中继资源。 可以使用 Azure 门户、Azure CLI 或 Azure 资源管理器模板创建中继命名空间和混合连接。 有关详细信息,请参阅使用 Azure 门户创建 Azure 中继命名空间和混合连接。
注意
确保已启用选项:需要客户端授权。 此选项可确保只有经过授权的客户端才能连接到混合连接终结点。 可以使用 Azure 门户或 Azure CLI 启用客户端授权和管理客户端授权规则。 有关详细信息,请参阅安全 Azure 中继混合连接。
实现 Azure 中继混合连接侦听器。
- 选项 1:可以使用适用于 .NET 的 Azure 中继 SDK 以编程方式创建混合连接侦听器并处理传入的请求。 有关详细信息,请参阅 Azure 中继混合连接 - HTTP 请求 (.NET)。
- 选项 2:Azure 中继桥。 可以使用 Azure 中继桥,这是一个跨平台命令行工具,可以创建来自或通往任意位置的无 VPN TCP 隧道。 可以将 Azure 中继桥作为 Docker 容器或独立的可执行文件来运行。 有关详细信息,请参阅 Azure 中继桥。
确保混合连接侦听器已连接。 可以使用以下 Azure CLI 命令列出命名空间中的混合连接并检查其状态。
az relay hyco list --resource-group [resource-group-name] --namespace-name [namespace-name]. You should see a "listenerCount" attribute in the properties of your hybrid connection.
创建 Azure 事件网格系统主题。 可以使用 Azure 门户、Azure CLI 或 Azure 资源管理器模板创建一个系统主题,该主题对应于具有事件(例如存储帐户、事件中心或 Azure 订阅)的 Azure 服务。 有关详细信息,请参阅 Azure 事件网格中的系统主题。
创建系统主题的事件订阅。 可以使用 Azure 门户、Azure CLI 或 Azure 资源管理器模板创建一个事件订阅,该订阅定义事件的筛选器条件和目标终结点。 在这种情况下,请选择“Azure 中继混合连接”作为终结点类型并提供混合连接的连接字符串。 有关详细信息,请参阅 Azure 中继混合连接作为事件处理程序。
使用 Webhook 从 Azure 事件网格接收事件时的注意事项
确保已实现云事件验证握手。 下面是以 C# 编写的示例代码,演示如何验证订阅创建期间所需的云事件架构握手。 可以使用此示例代码作为参考,以偏好的语言实现自己的验证握手逻辑。
if (context.Request.HttpMethod == "OPTIONS" && context.Request.Url.PathAndQuery == _settings!.relayWebhookPath)
{
context.Response.StatusCode = HttpStatusCode.OK;
context.Response.StatusDescription = "OK";
var origin = context.Request.Headers["Webhook-Request-Origin"];
context.Response.Headers.Add("Webhook-Allowed-Origin", origin);
using (var sw = new StreamWriter(context.Response.OutputStream))
{
sw.WriteLine("OK");
}
context.Response.Close();
}
如果要将事件从 Azure 中继桥转发到本地 Webhook,可以使用以下命令:
.\azbridge.exe -x "AzureRelayConnectionString" -H [HybridConnectionName]:[http/https]/localhost:[ApplicationPort] -v