呼び出す必要がある URL が数十万あります。これらは、それらを処理し、ステータス コードをテーブルに書き込むアプリケーション サーバーへの呼び出しです。応答 (成功/失敗) を待つ必要はありません。サーバーが要求を受け取っただけです。また、Tomcat が処理できる同時要求の数を調べていないため、一度に実行できる同時ジョブの数を指定できるようにしたいと考えています。
これは私がこれまでに得たものであり、基本的には、URL呼び出しではなく、他の誰かが同様のことを試みたものです。テキスト ファイルには、それぞれの行に各 URL が含まれています。URL は次のようになります。
http://webserver:8080/app/mwo/services/create?server=ServerName&e1user=admin&newMWONum=123456&sourceMWONum=0&tagNum=33-A-1B
そしてコード:
$maxConcurrentJobs = 10
$content = Get-Content -Path "C:\Temp\urls.txt"
foreach ($url in $content) {
$running = @(Get-Job | Where-Object { $_.State -eq 'Running' })
if ($running.Count -le $maxConcurrentJobs) {
Start-Job {
Invoke-WebRequest -UseBasicParsing -Uri $using:url
}
} else {
$running | Wait-Job -Any
}
Get-Job | Receive-Job
}
私が抱えている問題は、「ジョブ」ごとに 2 つのエラーが発生することであり、その理由がわかりません。URL 配列 $content をダンプすると問題なく表示され、Invoke-WebRequest を 1 つずつ実行するとエラーなく動作します。
126 Job126 BackgroundJob Running True localhost ...
Invalid URI: The hostname could not be parsed.
+ CategoryInfo : NotSpecified: (:) [Invoke-RestMethod], UriFormatException
+ FullyQualifiedErrorId : System.UriFormatException,Microsoft.PowerShell.Commands.InvokeRestMethodComman
d
+ PSComputerName : localhost
Invalid URI: The hostname could not be parsed.
+ CategoryInfo : NotSpecified: (:) [Invoke-RestMethod], UriFormatException
+ FullyQualifiedErrorId : System.UriFormatException,Microsoft.PowerShell.Commands.InvokeRestMethodComman
d
+ PSComputerName : localhost
ヘルプまたは代替の実装をいただければ幸いです。私はPowerShellを使用しないことにオープンですが、Windows 7デスクトップまたはWindows 2008 R2サーバーに限定されており、ネットワークの遅延を削減するために、URLでlocalhostを使用してサーバー自体で最終スクリプトを実行することになるでしょう。