【问题标题】:How can I create an output binding to SignalR Service from Azure Functions?如何从 Azure Functions 创建到 SignalR 服务的输出绑定?
【发布时间】:2020-05-16 14:27:30
【问题描述】:

我正在尝试实现一个实时聊天应用程序。执行协商功能后,客户端向 Cosmos 集合添加消息。

https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-concept-azure-functions

  1. 在 Cosmos DB 集合中进行了更改

  2. 更改事件传播到 Cosmos DB 更改源

  3. 使用 Cosmos DB 触发器由更改事件触发 Azure Functions

  4. SignalR 服务输出绑定向 SignalR 服务发布消息

  5. SignalR 服务将消息发布到所有连接的客户端

我处理了前 3 个步骤,但我被困在第 4 步。是否有任何代码示例演示如何在触发器和 SignalR 服务之间设置 SignalR 输出绑定?我正在使用 C#,理想情况下想要一个仅使用属性的示例(即没有 json 配置)。

【问题讨论】:

    标签: azure websocket signalr azure-functions azure-cosmosdb


    【解决方案1】:

    您可以像这样使用Azure SignalR output binding 将 Cosmos DB Change Feed 连接到 SignalR:

    public static async Task Run(
        [CosmosDBTrigger(
            databaseName: "your-monitored-db",
            collectionName: "your-monitored-collection",
            ConnectionStringSetting = "CosmosConnectionStringSettingName",
            LeaseCollectionName = "leases")]
            IReadOnlyList<Document> events,
        [SignalR(HubName = "events", ConnectionStringSetting = "SignalRConnectionStringSettingName")] 
            IAsyncCollector<SignalRMessage> signalRMessages,
        ILogger log)
    {
        await signalRMessages.AddAsync(new SignalRMessage()
        {
            Target = "nameOfTheSignalRHub",
            Arguments = new[] {
                events.Select(singleEvent => JsonConvert.DeserializeObject<YourEventClass>(singleEvent.ToString()))
            }
        });
    }
    

    请参阅this repo,了解使用您提议的架构的完整解决方案。

    【讨论】:

    • 谢谢!这有助于我更好地理解绑定。
    【解决方案2】:

    这里有一个如何从 Azure Function 向 SignalR 发送消息的示例: https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-concept-serverless-development-config

    【讨论】:

    • 如果链接过时,您能否将链接中的相关信息提供到您的 SO 答案中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多