c# - Azure函数应用程序、服务总线和返回服务总线

标签 c# azure azure-functions servicebus

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

这意味着我从此函数返回的任何内容都将返回到“返回”队列。

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

所以我添加了 MessageReceiver 作为带有 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 处理的。我喜欢这个,因为它会为我照顾atomcity。

但是如果我包含以下行:

await messageReceiver.DeadLetterAsync(lockToken);

这会将当前消息移至 DLQ。

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

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

最佳答案

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

关于c# - Azure函数应用程序、服务总线和返回服务总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55932497/

相关文章:

c# - XAML DataTemplate 数据绑定(bind)

c# - 为什么在将可空类型转换为 Roslyn 中的基类时没有转换?

Azure Api 管理清除

azure - 自定义域未显示在 Azure 函数中

c# - 在一个字节中找到设置位的位置

c# - 在WPF中创建动态生成的单选按钮时,程序崩溃

c# - 使用代理服务器上传 Azure 存储客户端库

azure - Microsoft Azure 默认安全设置的更改

powershell - 在 Azure Function 中使用托管标识来访问 Graph API

json - 在Python中的azure函数应用程序中未在 `req.get_json()`中获取json输入