直接从 Angular 客户端订阅 Azure 事件网格主题
Subscribing to an Azure Event Grid topic directly from an Angular client
我正在开发一个需要响应来自第三方 WebHook 的事件的应用程序。我选择 Azure Event Grid 作为我选择的事件代理,Angular 用于前端,Asp.Net Core 用于后端。
在我当前的解决方案中,我使用 HTTP 触发的 Azure 函数从 WebHook 发布到 Azure 事件网格。此函数将第三方事件格式化为正确的 Azure 事件网格格式(以相关事件用户为主题,事件类型为 WebHook 事件类型)。现在,使用 WebHook Azure 事件网格订阅将事件网格事件推送到我的 Asp.Net 后端。
我的问题是有些事件只涉及前端(比如 reminders/light 通知),因此我想直接将事件从事件网格发布到前端,而不使用 WebSocket 到端点在我的后端。
我目前正在使用 SignalR 在 Angular 和 Asp.Net Core 之间创建一个 WebSocket 连接,但我不想通过发送将被重定向到 Angular.
有没有办法使用 WebSocket 连接直接订阅 Azure 事件网格?就最小 pushing/polling 而言,最佳解决方案是什么?或者我应该切换到另一个带有 JavaScript 库的事件代理(比如 RabbitMQ)?
Azure SignalR Service 可以帮助您集成 Asp.net、Angular 等客户端以使用 Azure 事件网格事件。以下屏幕片段显示了您的逻辑订阅者(客户端)使用 webhook 事件处理程序端点的示例。
如上图所示,EventGridTrigger 函数代表 Azure SignalR 服务的集成器。 AF 已针对 SignalR 服务绑定进行了扩展,请参阅更多详细信息 here。
使用此扩展,EventGridTrigger 函数作为 SignalR 服务的集成器非常简单和轻量级,请参见以下示例:
#r "Microsoft.Azure.EventGrid"
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
#r "Newtonsoft.Json"
using Microsoft.Azure.EventGrid.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static async Task Run(EventGridEvent eventGridEvent, IAsyncCollector<SignalRMessage> signalRMessages, ILogger log)
{
await signalRMessages.AddAsync(
new SignalRMessage
{
Target = "Notify",
Arguments = new[] { eventGridEvent.Data.ToString() }
});
}
和 function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
},
{
"type": "signalR",
"name": "signalRMessages",
"hubName": "mySignalRService/users/myClientId",
"connectionStringSetting": "AzureSignalRConnectionString",
"direction": "out"
}
]
}
此外,请查看有关在客户端使用 Azure SignalR 服务的更多示例(例如 codeproject, github, here)。
我正在开发一个需要响应来自第三方 WebHook 的事件的应用程序。我选择 Azure Event Grid 作为我选择的事件代理,Angular 用于前端,Asp.Net Core 用于后端。
在我当前的解决方案中,我使用 HTTP 触发的 Azure 函数从 WebHook 发布到 Azure 事件网格。此函数将第三方事件格式化为正确的 Azure 事件网格格式(以相关事件用户为主题,事件类型为 WebHook 事件类型)。现在,使用 WebHook Azure 事件网格订阅将事件网格事件推送到我的 Asp.Net 后端。
我的问题是有些事件只涉及前端(比如 reminders/light 通知),因此我想直接将事件从事件网格发布到前端,而不使用 WebSocket 到端点在我的后端。
我目前正在使用 SignalR 在 Angular 和 Asp.Net Core 之间创建一个 WebSocket 连接,但我不想通过发送将被重定向到 Angular.
有没有办法使用 WebSocket 连接直接订阅 Azure 事件网格?就最小 pushing/polling 而言,最佳解决方案是什么?或者我应该切换到另一个带有 JavaScript 库的事件代理(比如 RabbitMQ)?
Azure SignalR Service 可以帮助您集成 Asp.net、Angular 等客户端以使用 Azure 事件网格事件。以下屏幕片段显示了您的逻辑订阅者(客户端)使用 webhook 事件处理程序端点的示例。
如上图所示,EventGridTrigger 函数代表 Azure SignalR 服务的集成器。 AF 已针对 SignalR 服务绑定进行了扩展,请参阅更多详细信息 here。
使用此扩展,EventGridTrigger 函数作为 SignalR 服务的集成器非常简单和轻量级,请参见以下示例:
#r "Microsoft.Azure.EventGrid"
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
#r "Newtonsoft.Json"
using Microsoft.Azure.EventGrid.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static async Task Run(EventGridEvent eventGridEvent, IAsyncCollector<SignalRMessage> signalRMessages, ILogger log)
{
await signalRMessages.AddAsync(
new SignalRMessage
{
Target = "Notify",
Arguments = new[] { eventGridEvent.Data.ToString() }
});
}
和 function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
},
{
"type": "signalR",
"name": "signalRMessages",
"hubName": "mySignalRService/users/myClientId",
"connectionStringSetting": "AzureSignalRConnectionString",
"direction": "out"
}
]
}
此外,请查看有关在客户端使用 Azure SignalR 服务的更多示例(例如 codeproject, github, here)。