我具有如下所示的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);
}
}
但是消息进入死信队列。为什么呢?邮件格式也正确。有任何线索吗?
答案 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
文件中。