Azure功能应用程序,服务总线和返回服务总线



我有一个Azure功能,带有服务总线输入属性和服务总线输出属性集。

这意味着我从此功能返回的任何内容都将返回"返回"队列。

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

所以我添加了MessageCeiver作为LockToken的参数。

都很好。

但是,现在,如果我处理消息并发送到DLQ,则我无法优雅地结束该函数,因为它期望返回。所以我做了一个例外。但是现在我在输出中有许多错误日志,例如"锁定无效"。

我试图将自动完成设置为false,但后来有一个不同的问题。我如何确保可以返回消息并将其记录在交易中并处理回滚?

任何指导??

示例:

  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处理。我喜欢这个,因为它会照顾我的原子。

,但是如果我包括该行:

await messageReceiver.DeadLetterAsync(lockToken);

这将将当前消息移至DLQ。

太好了!!!那就是我想要的。

,但我现在被迫退还或抛出异常。是否有任何办法,因为看到错误消息是误导性的,因为没有错误要遵循。

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

相关内容

最新更新