Moh*_*tri 9 c# azure-functions azure-blob-trigger
错误:消息已达到 MaxDequeueCount 5。将消息移至队列“webjobs-blobtrigger-poison”。当我尝试将新文件放入 Azure 的容器中时,出现 5 次操作失败,并显示以下消息:消息已达到 MaxDequeueCount 为 5。正在将消息移至队列“webjobs-blobtrigger-poison”。
这是我的代码:
using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Xml;
using System.Threading.Tasks;
namespace dynamicFileRepository
{
[StorageAccount("BlobConnectionString")]
public class copyBlobtoazureStorage
{
[FunctionName("copyBlobtoazureStorage")]
public void Run(
[BlobTrigger("input-file/{name}")] Stream inputBlob,
[Blob("output-file/{name}", FileAccess.Write)] Stream outputBlob,
string name, ILogger log, ExecutionContext context)
{
XmlDocument doc = new XmlDocument();
using (XmlReader reader = XmlReader.Create(inputBlob))
{
doc.Load(reader);
}
string jsonText = JsonConvert.SerializeXmlNode(doc);
Console.WriteLine(jsonText);
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {inputBlob.Length} Bytes");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出窗口:
Luk*_*gan 17
我已经遇到过这个问题好几次了,两次的原因都是因为我没有对要添加到队列中的有效负载进行 Base64 编码。
var queueClient = new QueueClient(connectionString, "my-queue");
var bytes = Encoding.UTF8.GetBytes(message);
await queueClient.SendMessageAsync(Convert.ToBase64String(bytes));
Run Code Online (Sandbox Code Playgroud)
令人沮丧的是,错误消息并没有更具启发性。事实上,有人向 Azure 团队提出了这个问题。
我最近也遇到这个问题。我有一个 Blazor 应用程序,它将消息排队到 Azure 队列,并使用第二个 Azure Functions 来出列并处理它,但不知何故,Azure Functions 不想处理该消息,并且该消息最终进入有害队列。
Azure.Storage.Queue事实证明,消息编码(默认为None)与 WebJobs 中使用的消息编码(Function App 默认为Base64 )不同。解决方案是确保两个应用程序使用相同的编码。
在您的 host.json 文件中,添加以下代码:
{
"version": "2.0",
"extensions": {
"queues": {
"messageEncoding": "base64" // or "none"
}
}
}
Run Code Online (Sandbox Code Playgroud)
在您想要发布消息的其他应用程序中,通过设置适当的编码QueueClientOptions
var client = new QueueClient("ConnectionString", "QueueName", new QueueClientOptions
{
MessageEncoding = QueueMessageEncoding.Base64 // or QueueMessageEncoding.None
});
Run Code Online (Sandbox Code Playgroud)
另外,当您向队列添加新消息时,不要忘记Encode the message body in Base64 encoding根据是否要使用 Base64 勾选 。
| 归档时间: |
|
| 查看次数: |
5648 次 |
| 最近记录: |