我想知道是否有一个工具或库,可以移动队列之间的消息?目前,我正在做的事情如下
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));
}
9条答案
按热度按时间c9qzyr3d1#
截至(2018-09-11),Microsoft Azure Storage Explorer的1.4.1版本不具备将消息从一个Azure队列移动到另一个队列的能力。
我blogged一个简单的解决方案,将有毒邮件传输回原始队列,并认为这可能会保存一些人几分钟。显然,您需要修复导致消息最终进入有毒消息队列的错误!
您需要添加一个NuGet包引用到Microsoft.NET.Sdk.Functions:
kr98yfug2#
Azure Storage Explorer版本1.15.0现在可以在2020年实现这一点。https://github.com/microsoft/AzureStorageExplorer/issues/1064
cyej8jka3#
Azure Storage基本上不支持将消息从一个队列移动到另一个队列。你得靠自己去做。
实现将消息从一个队列移动到另一个队列的一种方法是将消息从源队列中出队(通过调用
GetMessages
),读取消息的内容,然后在目标队列中创建新消息。您可以通过使用存储客户端库来实现这一点。我想到的一个移动消息的工具是
Cerebrata Azure Management Studio
(付费产品,15天免费试用)。它有这个功能。截至(2018-09-11),Microsoft Azure Storage Explorer的版本1.4.1不支持移动队列消息。
abithluo4#
下面是Mitch回答的更新版本,使用的是最新的Microsoft.Azure.Storage.Queue包。只需创建一个新的.NET Console应用程序,将上面提到的包添加到其中,并将Program.cs的内容替换为以下内容:
但是如果处理的消息数量超过1000条,它仍然很慢,所以我建议使用批处理API以获得更大的数量。
9avjhtql5#
这里有一个Python脚本,你可能会觉得很有用。您需要安装
azure-storage-queue
scyqe7ek6#
我只是不得不再次这样做,并花时间更新我的snipped到新的存储SDK。更多信息请参见https://www.bokio.se/engineering-blog/how-to-re-run-the-poison-queue-in-azure-webjobs/。
下面是我使用的代码
slhcrj9b7#
对于任何来这里寻找一个相当于@MitchWheats的Node的人,使用Azure函数回答。
要使用该函数,您需要提供用于存储队列的存储帐户的连接信息。这作为环境变量提供。您可以提供
AZURE_STORAGE_ACCOUNT
和AZURE_STORAGE_ACCESS_KEY
,或者提供AZURE_STORAGE_CONNECTION_STRING
。更多关于这方面的信息可以在Azure Storage SDK docs中找到。也写了几行关于它在这个Medium article
aij0ehis8#
根据Jon Canning的回答更新了python:
yyhrrdl89#
正如Mikael Eliasson所指出的,code in IGx89 answer损坏是因为
AddMessageAsync将覆盖消息上的一些信息,然后DeleteMessageAsync将给予404。更好的解决方案是将值复制到AddMessageAsync的新消息中
请参阅RetryPoisonMessages的增强版本,该版本仅指定消息列表(而不是队列中的所有消息),并允许复制消息而不是移动消息。它还记录每条消息的成功/失败。