Azure 函数应用、服务总线和 return 服务总线

Azure function app, service bus and return service bus

我有一个带有服务总线输入属性和服务总线输出属性集的 azure 函数。

这意味着我从这个函数 return 得到的任何东西都将 returned 到“return”队列。

但是,我想手动处理一些消息,因为重试它们没有意义,我只想将它们直接放在 LDQ 上并继续。

所以我添加了 MessageReceiver 作为 lockToken 的参数。

一切顺利。

但是现在,如果我处理消息并发送到 DLQ,我将无法正常结束函数执行,因为它期待 return。所以我抛出一个异常。但是现在我在输出中有很多错误日志,例如“锁定无效”。

我试图将自动完成设置为 false,但我遇到了不同的问题;我如何确保我可以 return 消息并将其记录在事务中并处理回滚?

有指导吗??

示例:

  public static class Function1
    {
        [FunctionName("Function1")]
        [return: ServiceBus("returnQueueName", Connection = "myConnectionString")]
        public static async System.Threading.Tasks.Task<ReturnMessage> RunAsync([ServiceBusTrigger("mytopic", "mysubscription", Connection = "myConnectionString")]
        string mySbMsg, ILogger log,
            MessageReceiver messageReceiver, string lockToken)
        {
            log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");

            await messageReceiver.DeadLetterAsync(lockToken);

            return new ReturnMessage();
        }
    }

    public class ReturnMessage
    {
        public string Payload { get; set; }
    }

希望您能看到输入队列和输出队列由托管系统 Azure 处理。我喜欢这个,因为它会为我照管 atomcity。

但如果我包含以下行:

await messageReceiver.DeadLetterAsync(lockToken);

这会将当前消息移至 DLQ。

太棒了!!!这就是我想要的。

但我现在被迫 return 某些事情或抛出异常。有什么办法可以解决这个问题,因为看到错误消息会产生误导,因为没有错误可循。

据我所知,您似乎不应该使用自动 return 服务总线绑定。相反,您应该手动连接到 return topic/queue 并手动处理消息物流。