$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$id]);
$user = $stmt->fetch();$user = $em->getRepository(User::class)->find($id);
  
  Все хорошо работает, пока бизнес не меняет логику, меняться запрос и получается много переделывать.а переписывать и тестировать процедуры в субд проще? тем более, скорее всего, с изменением процедуры придется переписывать код все равно.
И как решают это другие?
У меня такое решение в голову приходит:
Каждый консюмер периодически обязан подать признаки жизни - в некую таблицу БД записывать дату и время активности.
И по крону, другой скрипт проверяет записи в таблице, если какой-то консюмер долго не обновлял запись - убить процесс по pid.
[Service]
...
WatchdogSec=30s
Restart=on-failureКаждый консюмер периодически обязан подать признаки жизни - в некую таблицу БД записывать дату и время активности.
new Phar('my_new_phar.phar') создаёт новый архив
  
  
  
  version: '2.0'
services:
    rabbitmq:
        image: rabbitmq:3-management-alpine
        container_name: rabbitmq
        volumes:
            - ./.docker/rabbitmq/etc/:/etc/rabbitmq/
            - ./.docker/rabbitmq/data/:/var/lib/rabbitmq/
            - ./.docker/rabbitmq/logs/:/var/log/rabbitmq/
        ports:
            - "5672:5672"
            - "15672:15672"
    nginx:
        image: nginx:latest
        ports:
            - "8000:80"
        # монтируем директории, слева директории на основной машине, справа - куда они монтируются в контейнере
        volumes:
            - ./hosts:/etc/nginx/conf.d
            - ./www:/var/www
            - ./logs:/var/log/nginx
        links:
            - php
    php:
        # у нас свой образ для PHP, указываем путь к нему и говорим что его надо собрать
        build: ./images/php
        links:
            - mysql
            - rabbitmq
        volumes:
            - ./www:/var/www
    mysql:
        image: mariadb
        ports:
            - "3306:3306"
        volumes:
            - ./mysql:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: secret
        environment:
            PMA_HOST: mysql
            MYSQL_USERNAME: root
            MYSQL_ROOT_PASSWORD: secret$ch = curl_init('https://api.um-agency.com/feed/tracks/get?pass_key=bamboo5e4d9fcf47abb&block_type=3&offset=0&count=100');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Accept: application/json",                                             //
        "User-Agent: VK_Music/4.2.1 (Android 4.2.4749 8.1.0)",                  // Получение списка топ 100 чарта вк, маскируясь под Boom
        "Host: api.um-agency.com",                                              //
        "Accept-Encoding: utf-8",
        "Connection: Keep-Alive"
    ));
    $html = curl_exec($ch);
    curl_close($ch);
    $list_arr = json_decode($html);