Merhaba arkadaşlar,
Bir projemizde yoğun olarak kuyruk işlemi kullanmaktayız. Bir süre sonra hafıza yetersizliğinde dolayı kuyruğu restart etmemiz gerekiyor. Şu anda 30 dk da bir restart ettiğimizde sorun olmuyor ancak ilerleyen zamanlarda başımızı ağrıtacak gibi duruyor.
Dökümantasyonda aşağıdaki belirtilen durumu nasıl kullanacağımız konusunda yardıma ihtiyacımız var.
Resource Considerations
Daemon queue workers do not "reboot" the framework before processing each job. Therefore, you should free any heavy resources after each job completes. For example, if you are doing image manipulation with the GD library, you should free the memory with imagedestroy when you are done.
Kuyrukta yoğun olarak kullanılan örnek Class aşağıdadır.
class BankaWsdl implements IBankAccountChecker
{
protected $url;
protected $AllowTypes;
protected $bank_account;
protected $options;
public function __construct(BankAccount $bank_account)
{
$this->AllowTypes = ['1011', '3011', '1011', '7721']; // İzin verilen işlem Türleri
$this->bank_account = $bank_account;
$this->url = 'wsdl_url';
$this->options = array(
'login' => $this->bank_account->api_username,
'password' => $this->bank_account->api_password,
'keep_alive' => false,
'connection_timeout' => 25,
'cache_wsdl' => WSDL_CACHE_MEMORY,
'ssl_method' => SOAP_SSL_METHOD_TLS,
'stream_context' => stream_context_create(
[
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
]
]
)
);
}
public function getTransactions(Carbon $start_date, Carbon $finish_date)
{
try {
$transactions = collect();
$data = [
'baslangicTarihi' => $start_date->startOfDay()->format('YmdHis000000'),
'bitisTarihi' => $finish_date->endOfDay()->format('YmdHis000000')
];
$client = new SoapClient($this->url, $this->options);
$result = $client->GetExtreWithParams($data);
$result = simplexml_load_string($result->GetExtreWithParamsResult->any);
// return (array)$result;
$this->bank_account->update(['balance' => str_replace(',', '.', @$result->Hesap->Bakiye)]);
$say = count(@$result->Hesap->Detay);
if ($say < 1) {
return ['success' => false, 'message' => 'Herhangi Bir Hareket Bulunmadı'];
} elseif ($say == 1) {
$detaylar = [$result->Hesap->Detay];
} else {
$detaylar = $result->Hesap->Detay;
}
foreach ($detaylar as $detay) {
if ((string)$detay->TutarBorcAlacak == "+") {
$old = ['-',':',' '];
$new = [' ',' ',' '];
$aciklama = str_replace($old,$new,(string)$detay->Aciklama);
$key = (string)$detay->FisNo . '' . (string)$detay->TimeStamp . '' . str_replace(',', '', (string)$detay->SonBakiye);
$data = [
'key' => $key,
'amount' => str_replace(',', '.', (string)$detay->Tutar),
'moment' => (string)$detay->TimeStamp,
'description' => mb_strtoupper($aciklama),
'transaction_type' => (string)$detay->FonksiyonKodu,
'code' => Hash::make($this->bank_account->id . ':' . $key . ':' . str_replace(',', '.', (string)$detay->Tutar))
];
$transactions->push($data);
}
}
// return 'OK';
if ($transactions->count() < 1) {
return ['success' => false, 'message' => 'Herhangi Bir Hareket Bulunmadı.'];
}
return ['success' => true, 'transactions' => $transactions];
} catch (\Exception $e) {
Log::debug($e);
return ['success' => false, 'message' => 'Bankadan Bilgiler alınamadı.'];
}finally {
unset($client);
}
}
}
__destruct() fonksiyonunda tüm değişkenleri unset etmek yararlı olabilir mi? Yada başka ne gibi bir çözüm aramalıyız. Teşekkürler.