How to Configure Magestore POS using RabbitMQ on Magento
Prerequisites
1. RabbitMQ is installed and connected to Magento.
The image below shows that RabbitMQ is connected with Magento, if the queue “async.operations.all” does not display as the image, that means RabbitMQ cannot connect to Magento, please follow the instructions to install RabbitMQ from Magento to configure it.
2. Magestore POS supports message queue
POS Enterprise Commerce >=
v4.8.0
POS Enterprise >=
v4.13.8
POS Pro Commerce >=
v4.5.0
POS Pro >=
v4.15.0
Read more: How to check your POS version from the backend, to know which version of Magestore POS you are using.
3. Magento Cron is configured and running
Configure
1. Configure the env . file
Open file
app/etc/env.php
Find the key ‘cron_consumers_runner’ in the file
If there is no key ‘cron_consumers_runner’ in the file, add the below config, place to the same level as the key ‘queue’
…
'cron_consumers_runner' => [
'cron_run' => true,
'max_messages' => 0,
'consumers' => []
],
…
If the file already has the key ‘cron_consumers_runner’, and the array ‘consumers’ already has the value, then it needs
magestore_pos_process_order.convert.consumer
to be appended to the end of the array.
Note: If there is no key ‘consumers’ or there is but an empty array, then no need to modify anything because by default all consumers are allowed.
…
'cron_consumers_runner' => [
'cron_run' => true,
'max_messages' => 0,
'consumers' => [
'async.operations.all',
'codegeneratorProcessor',
'product_action_attribute.update',
'product_action_attribute.website.update',
'exportProcessor',
'magestore_pos_process_order.convert.consumer'
]
],
…
Find the key ‘queue’ > ‘consumers_wait_for_messages’ in the file, switch back to
0
, if not, add as below
…
'queue' => [
'consumers_wait_for_messages' => 0,
],
…
Save the file
After editing it will look like the image below
Notes: See more suggestions from Magento
2. Edit message queue configuration in Webpos module
1. File: app/code/Magestore/Webpos/etc/queue.xml
Tag “broker”
Attribute “exchange” change from “magento-db” to “magento”
Attribute “type” change from “db” to “amqp”
File content after being changed
<?xml version="1.0"?>
<!--
/**
* Copyright © Magestore, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
<broker topic="magestore_pos_process_order.convert.topic" exchange="magento" type="amqp">
<queue name="magestore_pos_process_order.convert.queue" consumer="magestore_pos_process_order.convert.consumer"
consumerInstance="Magento\Framework\MessageQueue\Consumer"
handler="Magestore\Webpos\Model\Checkout\PosOrder\Consumer::execute"/>
</brok
</config> , you may need to do some additional configuration as below sesion in the Magento Backend.From the Admin Menu go to System > MageMojo > Cron Settings, edit the following fields:FIELDVALUEEXPLAINCron EnabledYes (Checked)Turn on MageMojo CronMaximum Cron Processes3 (If already a number greater than 3, keep it)Running multiple cron threads in parallel helps handle more workload (If set to 1, the convert order thread has to wait for other threads to complete before it can be run, resulting in a long wait time for the conversion order).Consumers Job Timeout600 (If already a larger number, keep it)Avoid the order that is being converted to be terminated, leading to the error that the shipment and payment cannot be saved, because the timeout time is too short.Consumers GovenorNo (UnChecked)Avoid MageMojo to terminate the conversion order process when the consumer is converting the order.Then click the “Save” button.Settings after being changed3. Run commandsphp bin/magento maintenance:enable
php bin/magento cron:remove
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy -f -j 10
php bin/magento cache:flush
php bin/magento cron:install
php bin/magento maintenance:disable4. ResultAdvanced configurationBy default, the message queue will run single-thread, which that means, 1 consumer can only create 1 worker at a time. In case your transaction is too much, the worker will not be able to process it in time, leading to the converting to Magento Order is slower because of the long queue. To solve this problem, Magestore POS has a mechanism to run multiple workers.Run the following command to change configphp bin/magento config:set --lock-env webpos/order_converter/number_of_thread_worker 3Run the following commands to apply configphp bin/magento maintenance:enable
php bin/magento cron:remove
php bin/magento setup:upgrade
php bin/magento cache:flush
php bin/magento cron:install
php bin/magento maintenance:disableThe number of workers refers to the table below