Fer*_*oul 4 asp.net publish-subscribe messagebroker angular azure-eventgrid
我正在开发一个需要响应来自第三方 WebHook 的事件的应用程序。我选择 Azure Event Grid 作为我选择的事件代理,Angular 作为前端,Asp.Net Core 作为后端。
在我当前的解决方案中,我使用 HTTP 触发的 Azure 函数从 WebHook 发布到 Azure 事件网格。此函数将第三方事件格式化为正确的 Azure 事件网格格式(以相关事件用户为主题,事件类型为 WebHook 事件类型)。目前,事件网格事件已使用 WebHook Azure 事件网格订阅推送到我的 Asp.Net 后端。
我的问题是,某些事件仅涉及前端(例如提醒/灯光通知),因此我想直接将事件从事件网格发布到前端,而不使用 WebSocket 到后端的端点。
我目前正在使用 SignalR 在 Angular 和 Asp.Net Core 之间创建 WebSocket 连接,但我不想通过发送仅重定向到 Angular 的事件来使后端过载。
有没有办法使用 WebSocket 连接直接订阅 Azure 事件网格?就最小推送/轮询而言,最佳解决方案是什么?或者我应该切换到另一个带有 JavaScript 库的事件代理(如 RabbitMQ)?
Azure SignalR 服务可以帮助你集成 Asp.net、Angular 等客户端来使用 Azure 事件网格事件。以下屏幕片段显示了使用 Webhook 事件处理程序端点的逻辑订阅者(客户端)的示例。
如上图所示,EventGridTrigger函数代表 Azure SignalR 服务的集成器。AF 已针对 SignalR 服务绑定进行了扩展,请在此处查看更多详细信息。
使用此扩展,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() }
});
}
Run Code Online (Sandbox Code Playgroud)
和 function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
},
{
"type": "signalR",
"name": "signalRMessages",
"hubName": "mySignalRService/users/myClientId",
"connectionStringSetting": "AzureSignalRConnectionString",
"direction": "out"
}
]
}
Run Code Online (Sandbox Code Playgroud)
另外,请查看更多在客户端使用 Azure SignalR 服务的示例(例如codeproject、github、此处)。
归档时间: |
|
查看次数: |
2774 次 |
最近记录: |