Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony Messenger中没有配置的处理程序_Php_Symfony_Queue_Handler_Messenger - Fatal编程技术网

Php Symfony Messenger中没有配置的处理程序

Php Symfony Messenger中没有配置的处理程序,php,symfony,queue,handler,messenger,Php,Symfony,Queue,Handler,Messenger,我希望实现Messenger异步处理程序,并能够在Redis中对一些任务进行排队,但由于某些原因,我不能 这是我的全局配置: PHP 7.3.16 Symfony 4.4.7 信使4.4 Redis 5.0.3 预测1.1 我试着按照这个指南: 除了我用一个命令替换了我的控制器之外,一切都是从文档中复制/粘贴的 此调度命令似乎有效: php-bin/console-app:dispatch命令 ^Symfony\Component\Messenger\Envelope^{#5465-邮票:

我希望实现Messenger异步处理程序,并能够在Redis中对一些任务进行排队,但由于某些原因,我不能

这是我的全局配置:

  • PHP 7.3.16
  • Symfony 4.4.7
  • 信使4.4
  • Redis 5.0.3
  • 预测1.1
我试着按照这个指南:

除了我用一个命令替换了我的控制器之外,一切都是从文档中复制/粘贴的

此调度命令似乎有效:

php-bin/console-app:dispatch命令

^Symfony\Component\Messenger\Envelope^{#5465-邮票:[]
-消息:App\message\SmsNotification^{#5475 -内容:“看!我创建了一条消息!”}

此命令不返回已配置的处理程序:

php-bin/控制台调试:messenger

信使

=========

第二个命令在尝试使用消息时返回错误

{
  "type": "project",
  "license": "proprietary",
  "require": {
    "php": "7.3.*",
    "ext-ctype": "*",
    "ext-iconv": "*",
    "guzzlehttp/guzzle": "^6.5",
    "impulze/intervention-image-bundle": "^1.2",
    "laminas/laminas-code": "^3.4",
    "laminas/laminas-eventmanager": "^3.2",
    "nelmio/api-doc-bundle": "^3.6",
    "predis/predis": "^1.1",
    "sensio/framework-extra-bundle": "^5.1",
    "symfony/asset": "4.4.*",
    "symfony/console": "4.4.*",
    "symfony/dotenv": "4.4.*",
    "symfony/error-handler": "4.4.*",
    "symfony/expression-language": "4.4.*",
    "symfony/flex": "^1.3.1",
    "symfony/form": "4.4.*",
    "symfony/framework-bundle": "4.4.*",
    "symfony/http-client": "4.4.*",
    "symfony/intl": "4.4.*",
    "symfony/mailer": "4.4.*",
    "symfony/messenger": "4.4.*",
    "symfony/monolog-bundle": "^3.1",
    "symfony/orm-pack": "*",
    "symfony/phpunit-bridge": "^5.0",
    "symfony/process": "4.4.*",
    "symfony/security-bundle": "4.4.*",
    "symfony/serializer-pack": "*",
    "symfony/translation": "4.4.*",
    "symfony/twig-pack": "^1.0",
    "symfony/validator": "4.4.*",
    "symfony/web-link": "4.4.*",
    "symfony/webpack-encore-bundle": "^1.7",
    "symfony/yaml": "4.4.*"
  },
  "require-dev": {
    "doctrine/doctrine-fixtures-bundle": "^3.3",
    "sensiolabs/security-checker": "^6.0",
    "symfony/debug-pack": "*",
    "symfony/maker-bundle": "^1.0",
    "symfony/profiler-pack": "*",
    "symfony/test-pack": "*"
  },
  "config": {
    "preferred-install": {
      "*": "dist"
    },
    "sort-packages": true
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "App\\Tests\\": "tests/"
    }
  },
  "replace": {
    "paragonie/random_compat": "2.*",
    "symfony/polyfill-ctype": "*",
    "symfony/polyfill-iconv": "*",
    "symfony/polyfill-php72": "*",
    "symfony/polyfill-php71": "*",
    "symfony/polyfill-php70": "*",
    "symfony/polyfill-php56": "*"
  },
  "scripts": {
    "auto-scripts": {
      "cache:clear": "symfony-cmd",
      "assets:install %PUBLIC_DIR%": "symfony-cmd",
      "security-checker security:check": "script"
    },
    "post-install-cmd": [
      "@auto-scripts"
    ],
    "post-update-cmd": [
      "@auto-scripts"
    ]
  },
  "conflict": {
    "symfony/symfony": "*"
  },
  "extra": {
    "symfony": {
      "allow-contrib": false,
      "require": "4.4.*"
    }
  }
}
php-bin/console-messenger:consume-async

TypeError {#174
      #message: "The first argument must be an instance of "Symfony\Component\Messenger\RoutableMessageBus"."
      #code: 0
      #file: "./vendor/symfony/messenger/Command/ConsumeMessagesCommand.php"
      #line: 54
      trace: {
        ./vendor/symfony/messenger/Command/ConsumeMessagesCommand.php:54 { …}
        ./var/cache/dev/ContainerM8fc2IB/srcApp_KernelDevDebugContainer.php:3736 {
          ContainerM8fc2IB\srcApp_KernelDevDebugContainer->getConsole_Command_MessengerConsumeMessagesService()^
          › 
          › $this->privates['console.command.messenger_consume_messages'] = $instance = new \Symfony\Component\Messenger\Command\ConsumeMessagesCommand('', ($this->privates['messenger.receiver_locator'] ?? ($this->privates['messenger.receiver_locator'] = new \Symfony\Component\DependencyInjection\Argument\ServiceLocator($this->getService, [], []))), ($this->services['event_dispatcher'] ?? $this->getEventDispatcherService()), ($this->privates['monolog.logger.messenger'] ?? $this->getMonolog_Logger_MessengerService()), []);
          › 
          arguments: {
            $routableBus: ""
            $receiverLocator: Symfony\Component\DependencyInjection\Argument\ServiceLocator {#178 …}
            $eventDispatcher: Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher {#188 …}
            $logger: Symfony\Bridge\Monolog\Logger {#179 …}
            $receiverNames: []
          }
        }
        ./vendor/symfony/dependency-injection/Container.php:450 { …}
        ./vendor/symfony/dependency-injection/Argument/ServiceLocator.php:40 { …}
        ./vendor/symfony/console/CommandLoader/ContainerCommandLoader.php:45 { …}
        ./vendor/symfony/console/Application.php:541 { …}
        ./vendor/symfony/console/Application.php:634 { …}
        ./vendor/symfony/framework-bundle/Console/Application.php:117 { …}
        ./vendor/symfony/console/Application.php:235 { …}
        ./vendor/symfony/framework-bundle/Console/Application.php:83 { …}
        ./vendor/symfony/console/Application.php:147 { …}
        ./bin/console:42 { …}
      }
    }
    2020-04-20T20:08:02+02:00 [critical] Uncaught Error: The first argument must be an instance of "Symfony\Component\Messenger\RoutableMessageBus".
以下是一些相关文件…

# .env
MESSENGER_TRANSPORT_DSN=redis://127.0.0.1:6379/messages/?auto_setup=true&serializer=1&stream_max_entries=0&dbindex=0
但这并没有改变什么

我还检查了我的消息和消息处理程序是否注册为服务,它是:

php bin/console debug:container App
[70]应用程序\消息\消息通知

[71]应用程序\消息处理程序\消息处理程序


我仍然不知道是什么导致了这个问题,但我只是通过安装一个全新的Symfony 4.4.7项目并覆盖它,成功地解决了这个问题

我还发现,swiftmailer被mailer取代,twig bundle被twig pack取代,但仅适用于新项目,而composer未通知现有安装(甚至使用composer update/upgrade/recipes)。这可能是我出现问题的原因,但我不确定

步骤1:创建新的Symfony 4.4.7项目

composer create-project symfony/website-skeleton newProj ^4.4.7
sudo chown -R $USER:www-data 
cd /newProj
git init
git remote add origin $url_of_clone_source
git fetch origin
git checkout -b master --track origin/master
步骤2:用我的git项目覆盖

composer create-project symfony/website-skeleton newProj ^4.4.7
sudo chown -R $USER:www-data 
cd /newProj
git init
git remote add origin $url_of_clone_source
git fetch origin
git checkout -b master --track origin/master
步骤3:安装供应商并替换过时的依赖项

composer install
composer remove symfony/swiftmailer
composer require symfony/mailer
composer remove symfony/twig-bundle
composer require symfony/twig-pack
步骤4:检查messenger

$ php bin/console debug:messenger

Messenger
=========

messenger.bus.default
---------------------

 The following messages can be dispatched:

 ---------------------------------------------------------- 
  App\Message\SmsNotification                               
      handled by App\MessageHandler\SmsNotificationHandler  
  Symfony\Component\Mailer\Messenger\SendEmailMessage       
      handled by mailer.messenger.message_handler           
 ----------------------------------------------------------
这是我的实际composer.json文件

{
  "type": "project",
  "license": "proprietary",
  "require": {
    "php": "7.3.*",
    "ext-ctype": "*",
    "ext-iconv": "*",
    "guzzlehttp/guzzle": "^6.5",
    "impulze/intervention-image-bundle": "^1.2",
    "laminas/laminas-code": "^3.4",
    "laminas/laminas-eventmanager": "^3.2",
    "nelmio/api-doc-bundle": "^3.6",
    "predis/predis": "^1.1",
    "sensio/framework-extra-bundle": "^5.1",
    "symfony/asset": "4.4.*",
    "symfony/console": "4.4.*",
    "symfony/dotenv": "4.4.*",
    "symfony/error-handler": "4.4.*",
    "symfony/expression-language": "4.4.*",
    "symfony/flex": "^1.3.1",
    "symfony/form": "4.4.*",
    "symfony/framework-bundle": "4.4.*",
    "symfony/http-client": "4.4.*",
    "symfony/intl": "4.4.*",
    "symfony/mailer": "4.4.*",
    "symfony/messenger": "4.4.*",
    "symfony/monolog-bundle": "^3.1",
    "symfony/orm-pack": "*",
    "symfony/phpunit-bridge": "^5.0",
    "symfony/process": "4.4.*",
    "symfony/security-bundle": "4.4.*",
    "symfony/serializer-pack": "*",
    "symfony/translation": "4.4.*",
    "symfony/twig-pack": "^1.0",
    "symfony/validator": "4.4.*",
    "symfony/web-link": "4.4.*",
    "symfony/webpack-encore-bundle": "^1.7",
    "symfony/yaml": "4.4.*"
  },
  "require-dev": {
    "doctrine/doctrine-fixtures-bundle": "^3.3",
    "sensiolabs/security-checker": "^6.0",
    "symfony/debug-pack": "*",
    "symfony/maker-bundle": "^1.0",
    "symfony/profiler-pack": "*",
    "symfony/test-pack": "*"
  },
  "config": {
    "preferred-install": {
      "*": "dist"
    },
    "sort-packages": true
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "App\\Tests\\": "tests/"
    }
  },
  "replace": {
    "paragonie/random_compat": "2.*",
    "symfony/polyfill-ctype": "*",
    "symfony/polyfill-iconv": "*",
    "symfony/polyfill-php72": "*",
    "symfony/polyfill-php71": "*",
    "symfony/polyfill-php70": "*",
    "symfony/polyfill-php56": "*"
  },
  "scripts": {
    "auto-scripts": {
      "cache:clear": "symfony-cmd",
      "assets:install %PUBLIC_DIR%": "symfony-cmd",
      "security-checker security:check": "script"
    },
    "post-install-cmd": [
      "@auto-scripts"
    ],
    "post-update-cmd": [
      "@auto-scripts"
    ]
  },
  "conflict": {
    "symfony/symfony": "*"
  },
  "extra": {
    "symfony": {
      "allow-contrib": false,
      "require": "4.4.*"
    }
  }
}

我仍然不知道是什么导致了这个问题,但我只是通过安装一个全新的Symfony 4.4.7项目并覆盖它,成功地解决了这个问题

我还发现,swiftmailer被mailer取代,twig bundle被twig pack取代,但仅适用于新项目,而composer未通知现有安装(甚至使用composer update/upgrade/recipes)。这可能是我出现问题的原因,但我不确定

步骤1:创建新的Symfony 4.4.7项目

composer create-project symfony/website-skeleton newProj ^4.4.7
sudo chown -R $USER:www-data 
cd /newProj
git init
git remote add origin $url_of_clone_source
git fetch origin
git checkout -b master --track origin/master
步骤2:用我的git项目覆盖

composer create-project symfony/website-skeleton newProj ^4.4.7
sudo chown -R $USER:www-data 
cd /newProj
git init
git remote add origin $url_of_clone_source
git fetch origin
git checkout -b master --track origin/master
步骤3:安装供应商并替换过时的依赖项

composer install
composer remove symfony/swiftmailer
composer require symfony/mailer
composer remove symfony/twig-bundle
composer require symfony/twig-pack
步骤4:检查messenger

$ php bin/console debug:messenger

Messenger
=========

messenger.bus.default
---------------------

 The following messages can be dispatched:

 ---------------------------------------------------------- 
  App\Message\SmsNotification                               
      handled by App\MessageHandler\SmsNotificationHandler  
  Symfony\Component\Mailer\Messenger\SendEmailMessage       
      handled by mailer.messenger.message_handler           
 ----------------------------------------------------------
这是我的实际composer.json文件

{
  "type": "project",
  "license": "proprietary",
  "require": {
    "php": "7.3.*",
    "ext-ctype": "*",
    "ext-iconv": "*",
    "guzzlehttp/guzzle": "^6.5",
    "impulze/intervention-image-bundle": "^1.2",
    "laminas/laminas-code": "^3.4",
    "laminas/laminas-eventmanager": "^3.2",
    "nelmio/api-doc-bundle": "^3.6",
    "predis/predis": "^1.1",
    "sensio/framework-extra-bundle": "^5.1",
    "symfony/asset": "4.4.*",
    "symfony/console": "4.4.*",
    "symfony/dotenv": "4.4.*",
    "symfony/error-handler": "4.4.*",
    "symfony/expression-language": "4.4.*",
    "symfony/flex": "^1.3.1",
    "symfony/form": "4.4.*",
    "symfony/framework-bundle": "4.4.*",
    "symfony/http-client": "4.4.*",
    "symfony/intl": "4.4.*",
    "symfony/mailer": "4.4.*",
    "symfony/messenger": "4.4.*",
    "symfony/monolog-bundle": "^3.1",
    "symfony/orm-pack": "*",
    "symfony/phpunit-bridge": "^5.0",
    "symfony/process": "4.4.*",
    "symfony/security-bundle": "4.4.*",
    "symfony/serializer-pack": "*",
    "symfony/translation": "4.4.*",
    "symfony/twig-pack": "^1.0",
    "symfony/validator": "4.4.*",
    "symfony/web-link": "4.4.*",
    "symfony/webpack-encore-bundle": "^1.7",
    "symfony/yaml": "4.4.*"
  },
  "require-dev": {
    "doctrine/doctrine-fixtures-bundle": "^3.3",
    "sensiolabs/security-checker": "^6.0",
    "symfony/debug-pack": "*",
    "symfony/maker-bundle": "^1.0",
    "symfony/profiler-pack": "*",
    "symfony/test-pack": "*"
  },
  "config": {
    "preferred-install": {
      "*": "dist"
    },
    "sort-packages": true
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "App\\Tests\\": "tests/"
    }
  },
  "replace": {
    "paragonie/random_compat": "2.*",
    "symfony/polyfill-ctype": "*",
    "symfony/polyfill-iconv": "*",
    "symfony/polyfill-php72": "*",
    "symfony/polyfill-php71": "*",
    "symfony/polyfill-php70": "*",
    "symfony/polyfill-php56": "*"
  },
  "scripts": {
    "auto-scripts": {
      "cache:clear": "symfony-cmd",
      "assets:install %PUBLIC_DIR%": "symfony-cmd",
      "security-checker security:check": "script"
    },
    "post-install-cmd": [
      "@auto-scripts"
    ],
    "post-update-cmd": [
      "@auto-scripts"
    ]
  },
  "conflict": {
    "symfony/symfony": "*"
  },
  "extra": {
    "symfony": {
      "allow-contrib": false,
      "require": "4.4.*"
    }
  }
}

您是否在没有异步消息的情况下,通过在配置中注释路由选项进行检查?是的,我尝试过,但它没有更改任何内容。我也尝试过像这样手动配置处理程序,但它也没有更改任何内容。您是否在没有异步消息的情况下,通过在配置中注释路由选项进行检查?是的,我尝试过,但它没有更改任何内容。我还尝试过手动配置haNDLER是这样的,它也不会改变什么。