我想知道是否有可以在队列之间移动消息的工具或库?目前,我正在做类似下面的事情
public static void ProcessQueueMessage([QueueTrigger("myqueue-poison")] string message, TextWriter log)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connString);
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("myqueue");
queue.CreateIfNotExists();
var messageData = JsonConvert.SerializeObject(data, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });
queue.AddMessage(new CloudQueueMessage(messageData));
}
Run Code Online (Sandbox Code Playgroud) 我也一直在使用 Azure 存储队列来发布消息,然后将消息写入数据库表。但是我注意到,当处理队列上的消息时发生错误时,该消息将被写入有毒队列。
以下是我的应用程序设置的一些背景:
Azure Web App -> 将消息写入队列
Azure函数->队列触发器处理消息并将内容写入数据库
数据库架构存在问题,导致插入失败。每条消息都会重试 5 次,我相信这是重试队列消息的默认设置,并且在第 5 次尝试之后,该消息被放置在有害队列中。
数据库模式随后被修复,但现在我无法处理中毒队列上的消息。
我的问题是我们是否可以恢复写入有害队列的消息以便处理它们并将它们插入数据库,如果可以的话如何?
是否可以从位置队列创建警报?我有一个 blob 触发函数,但是当它失败x多次时,它会将此消息扔到有害队列中。我想做的是当该毒物队列的计数为 时创建警报x。
blobproperties覆盖来存储一些,metadata以便我可以跟踪故障,但似乎没有办法做到这一点?我正在考虑最后一次尝试跟踪一个事件来声明moving message to poison queue有更好的方法吗?
[FunctionName("MyFunction")]
public async Task Run(
[BlobTrigger("input-queue", Connection = "ConnectionString")] Stream blobContent,
string name,
System.Uri uri,
IDictionary<string, string> metaData,
BlobProperties properties,
ILogger log)
Run Code Online (Sandbox Code Playgroud)
编辑 注意到函数的重载:
[FunctionName("MyFunction")]
public async Task Run(
[BlobTrigger("input-queue", Connection = "ConnectionString")] ICloudBlob blobContent,
string name,
System.Uri uri,
IDictionary<string, string> metaData,
BlobProperties properties,
ILogger log)
{
if (!blobContent.Metadata.ContainsKey("mycount"))
{
blobContent.Metadata["mycount"] = "1";
await blobContent.SetMetadataAsync();
} …Run Code Online (Sandbox Code Playgroud)