The answer from @Rafael Corrêa Gomes (and any to the point that mentions either 'cron_run' => false or 'consumers' => ['async.operations.all'] in the configuration are quite outrageous because they make many folks copy-paste and destroy their message queues from functioning.
cron_run set to false in configuration means that the message consumers are ...
Danila is above is right Solutions that tell you to do cron_run = 'false" will disable other queues you do want, like bulk attribute update or export file generation.
Option 1 disable packages
php bin/magento module:disable Magento_WebapiAsync
php bin/magento module:disable Magento_Amqp
I think it makes sense to disable both as the absence of Ampq ...
Magento EE (If you're in CE you can use this extension, this answer will not help you setting up with that extension.)
Know the basics of the MQ protocol here a useful diagram
How to get started?
Everything starts from the communication.xml file (I assume you're creating a new module), its where you define the topics for the ...
The following steps should help:
Add the following element to array in app/etc/env.php:
'queue' => [
'amqp' => [
'host' => 'localhost',
'port' => '5672',
'user' => 'guest',
'password' => 'guest',
'virtualhost' => '/',
'ssl' => ''
Make sure exchanges, queues and exchange-to-...
You can find queue consumers by searching for etc/queue_consumer.xml files.
In Magento 2.3.0 Open Source, there was one, async.operations.all, from the Magento_WebapiAsync module, the asynchronous API.
In Magento 2.3.2 Open Source, the following have been added:
product_action_attribute.update from Magento_Catalog
In 2.3 queues were added for product mass updates. You would need to run the consumer for product_action_attribute.update for it to process the updates.
In your case it would be
bin/magento queue:consumers:start product_action_attribute.update, you could have multiple consumers running at the same time, but I guess one will do.
I had to force the setting to be 0 by adding the below to env.php:
'queue' => [
'consumers_wait_for_messages' => 0
If you look at this file: vendor/magento/framework-message-queue/CallbackInvoker.php
You will see that Magento 2 actually makes the default for this setting 1 (contrary to the documentation)
* Checks if consumers should ...
You should be able to override the connection type for these queues in env.php or config.php like so:
Change message queue from MySQL to AMQP
The following sample introduces a runtime configuration that allows you to redefine the adapter for a topic.
'queue' => [
'topics' => [
'product_action_attribute.update' => [
Edit the /app/etc/env.php file to configure the cron job consumers_runner.
'cron_consumers_runner' => [
'cron_run' => true,
'max_messages' => 20000,
'consumers' => [
]; // return closing
To get the list of all your queue consumers that ...
Unfortunately googling that topic will only lead you to quite destructive answers which will cause you disabling message queues entirely.
main.INFO: Consumer "async.operations.all" skipped as required connection "amqp" is not configured. Unknown connection name amqp 
It is exactly what it says. You're missing amqp connection details.
Flock not needed since Magento 2.3.2, because Magento already has own lock mechanism.
Thanks for the hint. I am experiencing the same issue. Is it so, that after each bulk update, we now need to run bin/magento queue:consumers:start product_action_attribute.updatevia Composer in order to make changes visible?
The default schedule is every minute, as you can see in this core file below.
<!-- /app/code/Magento/MessageQueue/etc/crontab.xml -->
<job name="consumers_runner" instance="Magento\MessageQueue\Model\Cron\ConsumersRunner" method="run">
<schedule>* * * * *</schedule>
Re-running cron ...
By default, all of Magento's default queues are defined with a db connection. The only one with a configured amqp connection is the 'async.operations.all' queue.
However, you can move the queues to amqp connection. Check the Magento official documentation on how to change this. The configurations mentioned there should be usable if added to your app/etc/env....
The problem solved itself after i updated to 2.4.1. I am still not sure what was the problem though.
It seems kinda strange they need to make bulk updating products so complicated. Magento 2 are over-complicating many simple functions (in my opinion).
I saw this in Magento official devdocs, wondering why you put 2 there
max_messages - The maximum number of messages each consumer must
process before terminating (default = 10000). Although we do not
recommend it, you can use 0 to prevent the consumer from terminating.
See consumers_wait_for_messages to configure how consumers process
messages from the ...
Making long history short, you need it when you have to optimize the high load operations in Magento 2.
RabbitMQ is a message broker that primarily uses AMQP for processing communications between 2 applications. It is a middleman where Queues can be defined and applications can connect to the Queues to pull the messages. Some tasks might be time-consuming. ...
I don't know how to disable it as it's a core system you might not be able to. As ever with Magento it's wrapped up in lots of xml files. You can use the cron to run them instead, it'll run as per your cron settings. You just have to add the below into the env.php (as long as a badly coded console module isn't setting the app state in a constructor, which ...
First verify XDebug is enabled for CLI PHP:
php -i | grep xdebug
Set these environment variables in the (SSH) shell of the Magento instance, you may need to change the port and host:
export XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9000 remote_host=127.0.0.1 remote_connect_back=0"
Now you can ...
This post "Symfony2 and RabbitMQ: lessons learned" does a nice job of explaining the problem (replace Symfony with Magento and it's still valid);
Because the consumer is one process that keeps running, that also
means that the service container and stuff keeps existing in memory.
When you’ve done some queries the database connection keeps open in
I had to read up myself and the concept also confused me
I found the following online and the context of what's trying to be done this makes sense.
This [merger] class can be used for preliminary processing of messages even before the class that was declared in queue.xml in the Consumer section. It is obligatory to use this class, but if you do not ...
We've published documentation about 2.1 message queues at http://devdocs.magento.com/guides/v2.1/config-guide/mq/config-mq.html and http://devdocs.magento.com/guides/v2.1/config-guide/mq/queue-migration.html
I prefer to use postfix queue system, it works better than magento built-in queue system.
Just install postfix on your local machine, setup a smarthost as relay. you can relay to amazon SES, SendGrid, or any remote SMTP service.
Then you need to point your magento2 to send email to localhost:25. I don't remember what method the builtin magento2 system is ...