Ich verwende Laravel 5
mit php 5.5.9-1ubuntu4.14
und mysql 5.5.47
. Ich habe eine Multi-Tenant-Umgebung mit jedem Mandanten mit einer separaten DB. So wird für jede HTTP-Anforderung, habe ich die entsprechende DB-Verbindung in den BeforeMiddleware
wie soLaravel 5 gleichzeitige Anfrage und geplanter Job
public function handle($request, Closure $next)
{
...
// Set the client DB name and fire it up as the new default DB connection
Config::set('database.connections.mysql_client.host', $db_host);
Config::set('database.connections.mysql_client.database', $db_database);
Config::set('database.connections.mysql_client.username', $db_username);
Config::set('database.connections.mysql_client.password', $db_password);
DB::setDefaultConnection('mysql_client');
...
}
Dies richtig, auch für die gleichzeitigen HTTP-Anforderungen funktioniert.
Aber jetzt möchte ich geplante Anwendungen zu meiner Anwendung hinzufügen. Diese Jobs senden Benachrichtigungen an Benutzer, die zu allen Mietern gehören. Daher muss ich mich erneut mit den entsprechenden Mandanten-Datenbanken verbinden. Diese Verbindung wird jedoch nicht über eine HTTP-Anfrage hergestellt. Nehmen wir an, ich habe eine CommunicationController
und eine Funktion darin, um Benachrichtigungen zu senden.
public function sendNotification()
{
...
DB::purge('mysql_client');//IMP
// Set the client DB name and fire it up as the new default DB connection
Config::set('database.connections.mysql_client.host', $db_host);
Config::set('database.connections.mysql_client.database', $db_database);
Config::set('database.connections.mysql_client.username', $db_username);
Config::set('database.connections.mysql_client.password', $db_password);
DB::setDefaultConnection('mysql_client');
...
}
Dies ist, wo ich die Config
Werte gesetzt. Diese Funktion wird jede Minute über Laravel Scheduler
ausgeführt.
Meine Fragen sind:
- Was passiert, wenn eine HTTP-Anforderung kommt? Gibt es Nebenläufigkeit Probleme wie
Config
Parameter werden sowohl in HTTP-Anfrage als auch geplante Job gesetzt? - Stellt die HTTP-Anfrage eine Verbindung zu einer falschen DB her, wenn sie gleichzeitig mit dem geplanten Job ausgeführt wird?
Ja, mir ist bekannt Diese Konfigurationswerte werden nur für die aktuelle Anfrage festgelegt. Aber ich war der Meinung, dass dies nur für HTTP-Anfragen zutrifft. Meine Frage war, was passieren würde, wenn eine HTTP-Anfrage und ein geplanter Befehl gleichzeitig ausgeführt werden. Aber jetzt ist es klar. Wenn ich mir den Code anschaue, bin ich sicher, dass es keine Nebenläufigkeitsprobleme geben wird. – linuxartisan