Я использую Laravel 5
с php 5.5.9-1ubuntu4.14
и mysql 5.5.47
. У меня есть многопользовательская среда с каждым арендатором, имеющим отдельную БД. Таким образом, для каждого запроса HTTP, я установил соответствующее соединение DB в BeforeMiddleware
как такLaravel 5 одновременный запрос и запланированная работа
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');
...
}
Это работает правильно, даже для одновременных запросов HTTP.
Но теперь я хочу добавить запланированные задания в свое приложение. Эти задания будут отправлять уведомления пользователям, принадлежащим всем арендаторам. Поэтому мне снова нужно подключиться к соответствующим базам данных арендаторов. Но это соединение не будет осуществляться через HTTP-запрос. Предположим, у меня есть CommunicationController
и функция внутри него для отправки уведомлений.
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');
...
}
Это где я поставил Config
значения. Эта функция будет выполняться каждую минуту через Laravel Scheduler
.
Мои вопросы:
- Что произойдет, когда запрос HTTP приходит? Будут ли возникать проблемы с параллелизмом , поскольку параметры
Config
устанавливаются как в HTTP-запросе, так и в задании по расписанию? - Будет ли HTTP-запрос подключаться к некорректной БД, если он работает одновременно с запланированным заданием?
Да, я знаю что значения Config установлены только для текущего запроса. Но я полагал, что это правда только для HTTP-запросов. Мой вопрос состоял в том, что произойдет, когда HTTP-запрос и запланированная команда будут выполняться одновременно. Но теперь ясно. Если посмотреть на код, я уверен, что не будет проблем с параллелизмом. – linuxartisan