无法使用Azure功能将消息发送到Service Bus队列

时间:2018-07-25 10:18:46

标签: c# azure azureservicebus servicebus

我具有如下所示的Azure功能-

[FunctionName("Demo")]
        public static void Run([ServiceBusTrigger("%Demo-Queue%", Connection = "AzureWebJobsBPGAServiceBus")]string myQueueItem,
             [ServiceBus("%Update-Queue%", Connection = "AzureWebJobsBPGAServiceBus")] ICollector<BrokeredMessage> updateMessage,
            TraceWriter log)
        {
            string query = "SELECT Id FROM MyTable";

            var data = dbs.GetData(query).GetAwaiter().GetResult();

            BrokeredMessage brokeredMessage;
            foreach (var item in data)
            {
                JObject jObject = new JObject(new JProperty("Id", item), new JProperty("MessageId", new Guid(item)));
                brokeredMessage = new BrokeredMessage(jObject.ToString());
                updateMessage.Add(brokeredMessage);
            }
        }
  

但是消息进入死信队列。为什么呢?邮件格式也正确。有任何线索吗?

2 个答案:

答案 0 :(得分:1)

如果将邮件移至死信队列,则原因可能是one of these。将两个自定义属性添加到死信消息时,将其移到死信队列(DeadLetterReason和DeadLetterErrorDescription)时,请尝试阅读这些属性以查找原因。

答案 1 :(得分:0)

您的Demo-Queue中的消息触发了您的功能,并且消息myQueueItem已被移至您的函数Demo至少10次,然后才被移到无效位置字母队列。失败> = 10次表示您的函数执行未成功> = 10次。

请搜索您的Function Logs,以查看是否有任何错误消息表明您的Function执行失败的原因,例如由于超时或您的功能代码中的错误。如果是由于超时导致的,则可以更改host.json中的autoRenewTimeout属性,以查看是否可以解决问题。

请注意,如果您使用的是消耗计划,则autoRenewTimeout需要保持在5分钟(默认)的最大执行时间或配置的functionTimeout属性(最大为10)的约束范围内分钟))放在您的host.json文件中。