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