第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Symfony 4 工作者使用學說無法正常工作:SQLSTATE[HY000] [2002]

Symfony 4 工作者使用學說無法正常工作:SQLSTATE[HY000] [2002]

PHP
滄海一幻覺 2021-12-03 16:14:41
我正在使用帶有 Symfony 4 信使組件的工人。這個工人是接收消息(來自rabbitMQ)啟動 ffmpeg對視頻進行處理并將某些內(nèi)容保存在數(shù)據(jù)庫中。為了在 Symfony 上配置這個 worker,我已經(jīng)這樣做了(中間件很重要):// config/packages/framework.yamlframework:    messenger:        buses:            command_bus:                middleware:                    # each time a message is handled, the Doctrine connection                    # is "pinged" and reconnected if it's closed. Useful                    # if your workers run for a long time and the database                    # connection is sometimes lost                    - doctrine_ping_connection                    # After handling, the Doctrine connection is closed,                    # which can free up database connections in a worker,                    # instead of keeping them open forever                    - doctrine_close_connection        transports:            ffmpeg:              dsn: '%env(CLOUDAMQP_URL)%'              options:                auto_setup: false                exchange:                    name: amq.topic                    type: topic                queues:                  ffmpeg: ~        routing:            # Route your messages to the transports, for now all are AMQP messages            'App\Api\Message\AMQPvideoFFMPEG': ffmpeg        ## Handle multiple buses ? https://symfony.com/doc/current/messenger/multiple_buses.html        ## When queries and command should be distinguished然后為了了解可能導致此問題的原因,我嘗試調(diào)試 Messenger 以查看中間件是否已正確配置root@b9eec429cb54:/var/www/html# php bin/console debug:messengerMessenger=========command_bus----------- The following messages can be dispatched: ------------------------------------------------------   App\Api\Message\AMQPvideoFFMPEG                             handled by App\Api\Message\Handler\FFMPEGHandler   ------------------------------------------------------ 看起來一切正常吧?
查看完整描述

2 回答

?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

只需在任何插入操作之前斷開連接:


public function handle(…)

{

    // your time-consuming business logic


    // disconnect if needed

    if (!$this->entityManager->getConnection()->ping()) {

        $this->entityManager->getConnection()->close();

    }


    // save your work

    $this->entityManager->flush();

}


查看完整回答
反對 回復 2021-12-03
?
阿晨1998

TA貢獻2037條經(jīng)驗 獲得超6個贊

在閱讀了我的中間件的代碼后,尤其是這個塊


https://github.com/symfony/symfony/blob/4.4/src/Symfony/Bridge/Doctrine/Messenger/DoctrinePingConnectionMiddleware.php


class DoctrinePingConnectionMiddleware extends AbstractDoctrineMiddleware

{

    protected function handleForManager(EntityManagerInterface $entityManager, Envelope $envelope, StackInterface $stack): Envelope

    {

        $connection = $entityManager->getConnection();

        if (!$connection->ping()) {

            $connection->close();

            $connection->connect();

        }

        if (!$entityManager->isOpen()) {

            $this->managerRegistry->resetManager($this->entityManagerName);

        }

        return $stack->next()->handle($envelope, $stack);

    }

}

我們可以看到我的處理程序在連接打開后立即被調(diào)用。這種行為應該可以工作,我認為是這樣,但是 FFMPEG 可以在很長一段時間內(nèi)使用相同的 RabbitMQ 消息工作。因此,將某些內(nèi)容插入數(shù)據(jù)庫的處理程序的最后一步可能會提供 mySQL 已消失錯誤或連接超時。


這就是為什么,我把這個片段放到一個方法中,沒有調(diào)用處理程序,只包含與學說連接相關的代碼,然后我在任何插入到我的數(shù)據(jù)庫之前調(diào)用它,如下所示:


public function __invoke(AMQPvideoFFMPEG $message)

    {

        // reset connection if not found

        $this->processService->testConnection();

        $process = $this->processService->find($message->getProcess());

        $this->renderServcie->updateQueue($process->getQueue(), "processing");


// some other stuff

}

testConnection() 方法在哪里


 /**

     * Reconnect if connection is aborted for some reason

     */

    public function testConnection()

    {

        $connection = $this->entityManager->getConnection();

        if (!$connection->ping()) {

            $connection->close();

            $connection->connect();

        }


    }

但在那之后我又嘗試了另一個問題


不支持重置非惰性管理器服務。將“doctrine.orm.default_entity_manager”服務設置為惰性服務,并在您的 composer.json 文件中要求“symfony/proxy-manager-bridge”。


安裝“symfony/proxy-manager-bridge”后,錯誤消失了。


到目前為止,還沒有遇到連接超時。等著瞧。


查看完整回答
反對 回復 2021-12-03
  • 2 回答
  • 0 關注
  • 196 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號