具有不同绑定的 Azure 函数

时间:2020-12-23 10:33:22

标签: azure-functions azureservicebus azure-storage-queues

我有一个应用程序,它为 Azure 服务总线队列和作为使用者的 Azure 函数发送一些事件,所以我的 Azure 函数有以下代码:

    [FunctionName("application-events-consumer")]
    public async Task Run([ServiceBusTrigger("events", Connection = "ServiceBusConnectionString")]
        Message message,
        string messageId,
        ILogger log)
    {
        log.LogInformation($"MessageId={messageId}");

        var jsonData = Encoding.UTF8.GetString(message.Body);
        var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
        var deserialized = JsonConvert.DeserializeObject(jsonData, settings);

        await _mediator.Publish(deserialized);
    }

问题是:我们不能在本地运行Azure Service Bus,所以我考虑使用Azure Storage Queue 只用于本地开发,因为它有一个模拟器,我没有任何问题将我的事件发送到Azure Storage Queue 因为我正在使用抽象,但从队列中读取我的事件时遇到问题,因为我的 azure 函数使用特定于 Azure 服务总线的绑定,因此我无法从 Azure 存储队列读取事件,是否可以使用绑定两种情况? Azure 存储队列和 Azure 服务总线取决于我的连接字符串?

1 个答案:

答案 0 :(得分:1)

不,Azure 服务总线队列和 Azure 存储队列是两种截然不同的服务,具有完全不同的技术堆栈。所以你不能只是切换两个连接字符串。他们需要不同的 SDK,因为它们有不同的绑定。

您唯一可以尝试的是拥有两个函数,一个带有用于本地调试的存储队列绑定,另一个带有用于在云中运行的 SB 队列绑定。两者都只接收消息,然后将处理放在一个通用的内部函数中。但是,这当然不会完全测试您的堆栈。