【问题标题】:Azure Function with different binds具有不同绑定的 Azure 函数
【发布时间】:2021-04-01 23:47:26
【问题描述】:

我有一个应用程序,它为 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-functions azureservicebus azure-storage-queues


    【解决方案1】:

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

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

    【讨论】:

    • 在您的回答之后,我考虑了这一点,并且我不会再在这种情况下使用 Azure Functions,我将注册一个消息处理程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多