从PowerShel并行将消息发送到Azure存储队列

时间:2018-11-04 15:05:01

标签: azure powershell azure-storage

如何并行发送消息到队列?

我尝试过:

$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的想法吗?

谢谢!

1 个答案:

答案 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()
}

我的测试结果如下: enter image description here

消息被添加到azure门户中: enter image description here