У меня есть несколько сотен тысяч 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 один за другим, они работают без ошибок.
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, и я, вероятно, буду запускать окончательный сценарий на самом сервере, используя localhost в URL-адресе, чтобы сократить сетевые задержки.