Ситуация
Я использую Prooph для моей командной шины, eventbus и хранилища событий в Symfony 4.3. Так как не каждый агрегат должен быть обработан событиями, мы также используем Doctrine DBAL, чтобы просто CRUD эти простые агрегаты.
В данном домене в моей командной шине настроены команды / обработчики, которые используют либо репозитории с событиями, либо репозитории DBAL.
При введении этой командной шины в команду CLI это приводит к нескольким соединениям в дБ при выполнении чего-либо на CLI.
Проблема
При попытке удалить/ создать базу данных (для первоначальной установки или сброса тестовой среды) Postgres отказывается, потому что есть другое активное соединение.
Could not drop database "api" for connection named default
An exception occurred while executing 'DROP DATABASE "api"':
SQLSTATE[55006]: Object in use: 7 ERROR: database "api" is being accessed by other users
DETAIL: There is 1 other session using the database.
- Я попытался отключить все команды, имеющие репозиторий с событиями, и проблема устранена.
- Я попытался отключить все команды, имеющие репозиторий DBAL, и проблема была устранена.
- Я попытался не вводить эту командную шину, и проблема исправлена.
Таким образом, я могу с уверенностью сделать вывод, что проблема возникает при использовании услугЭто соединение PDO в сочетании со службами с соединением DBAL.
Решение (не удалось)
Решение, которое я, хотя и предполагал, заключалось в использовании Doctrine DBAL $connection->getWrappedConnection()
дляProoph Eventstore. Очевидно, что печатание шрифтов не позволяет этого (getWrappedConnection()
возвращает Connection
-интерфейс), но настоящая Доктрина PDOConnection
расширяет \PDO
, если она работает, я готов принять хакерство в этой точке! Однако безрезультатно, еще 2 подключения.