Hocam, en basit ve hızlı çözüm dosya tabanlı kilit mekanizması. Hem ekstra sistem kurulumuna gerek yok, hem de bir URL'nin aynı anda birden fazla işlem tarafından yeniden denenmesini kolayca engelleyebilirsin.
function fetchData($url, $maxRetries = 3, $retryDelay = 1000000) {
$lockFile = sys_get_temp_dir() . '/lock_' . md5($url) . '.lock';
// Lock dosyasını kontrol et
if (file_exists($lockFile)) {
echo "URL şu an işleniyor, bekle...\n";
return false; // Başka bir işlem bu URL'yi işliyor
}
// Lock dosyasını oluştur
file_put_contents($lockFile, "1");
$retryCount = 0;
$response = false;
try {
while ($retryCount < $maxRetries) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$error = curl_errno($ch);
curl_close($ch);
if (!$error) {
break; // Başarılı, döngüyü kır
}
$retryCount++;
usleep($retryDelay); // Yeniden denemeden önce bekle
}
} finally {
unlink($lockFile); // İş bitti, lock'u kaldır
}
return $response;
}Uzun vadede daha büyük sistemlere geçersen, veritabanı ya da Redis gibi bir şey düşünebilirsin.