Как заставить Laravel слой базы данных повторять запросы, которые были отменены из-за ошибки репликации - PullRequest
0 голосов
/ 20 января 2020

У меня есть приложение Laravel, которое использует 2 PostgreSQL реплик базы данных для чтения данных. Балансировка нагрузки между этими базами данных происходит через вращающийся DNS .

Приложение само использует DNS-имя для доступа к репликам только для чтения. Но во время выполнения запроса я получаю следующую ошибку:

SQLSTATE[40001]: Serialization failure: 7 ERROR:  canceling statement due to conflict with recovery

И поэтому во избежание этого стоит повозиться со следующими настройками базы данных на каждой реплике:

max_standby_archive_delay
max_standby_streaming_delay
hot_standby_feedback

Но в случае это не применимо (например, нет доступа к серверу) или как дополнительная мера, как я могу настроить свое приложение laravel для повторного подключения к базе данных и повторного запроса?

Проблема в том, что это должно происходить с этой указанной ошибкой c, а не с другой, также я хочу, чтобы эта стратегия применялась только к этой указанной ошибке c, а не к какой-либо ошибке базы данных на глобальном уровне.

Идея, лежащая в основе моей логики c, заключается в том, что DNS работает в режиме циклического перебора, переподключаясь к другой реплике, я могу получать из него данные и меньше шансов, что мой запрос будет прервана.

У вас есть идея, как это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...