具有不同绑定的 Azure 函数

Azure Function with different binds

我有一个应用程序可以为 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 服务总线,所以我考虑使用 Azure 存储队列进行本地开发,因为它有一个模拟器,我发送事件没有任何问题到 Azure 存储队列,因为我正在使用抽象,但我无法从队列中读取我的事件,因为我的 azure 函数使用特定于 Azure 服务总线的绑定,所以我无法从 Azure 存储队列读取事件,是吗两种情况都可以使用绑定吗? Azure 存储队列和 Azure 服务总线取决于我的连接字符串?

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

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