如何并行发送消息到队列?
我尝试过:
$queue = Get-AzureStorageQueue -Name 'itemsqueue' -Context $context
1..100 | % {
$msgContent = "This is message $_"
Start-Job {
$queue.CloudQueue.AddMessage($msgContent)
}
}
Get-Job | Receive-Job
,但$ queue为空。我还尝试将其作为param($ queue)传递,也没有起作用。
在每个工作中都不必执行Get-AzureStorageQueue的想法吗?
谢谢!
答案 0 :(得分:1)
背景作业建立在PowerShell远程处理之上,因此在传递对象时执行类似的操作。
它们将对它们进行序列化/反序列化,而不是传递它们的所有复杂性,这意味着即使您使用-ArgumentList parameter of start-job
,$ queue也将反序列化为不具有AddMessage的字符串类型(或其他类型)。 ()方法。
这是使用BeginInvoke
的一种解决方法,其作用与工作相同:
$context=New-AzureStorageContext -StorageAccountName your_account -StorageAccountKey your_key
$queue = Get-AzureStorageQueue -Name 'myqueue0905' -Context $context
1..10 | % {
$m1 = New-Object -TypeName Microsoft.WindowsAzure.Storage.Queue.CloudQueueMessage -ArgumentList "this is a message $_"
$script = {param($p1,$m1) $p1.CloudQueue.AddMessage($m1)}
$p=[powershell]::Create()
$n=$p.AddScript($script).addargument($queue).addargument($m1)
$job=$p.BeginInvoke()
}