From ba49b6c39bb465a1f1fe94c3c92ad4d4f6c5f0a5 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Thu, 11 May 2017 13:12:54 +0300 Subject: [PATCH] [magento] Add basic docs for enqueue magento extension. --- docs/bundle/cli_commands.md | 4 + .../images/magento_enqueue_configuration.jpeg | Bin 0 -> 84333 bytes docs/index.md | 3 + docs/magento/cli_commands.md | 142 ++++++++++++++++++ docs/magento/quick_tour.md | 86 +++++++++++ 5 files changed, 235 insertions(+) create mode 100644 docs/images/magento_enqueue_configuration.jpeg create mode 100644 docs/magento/cli_commands.md create mode 100644 docs/magento/quick_tour.md diff --git a/docs/bundle/cli_commands.md b/docs/bundle/cli_commands.md index eded37430..0e89f1256 100644 --- a/docs/bundle/cli_commands.md +++ b/docs/bundle/cli_commands.md @@ -1,5 +1,9 @@ # Cli commands +The EnqueueBundle provides several commands. +The most useful one `enqueue:consume` connects to the broker and process the messages. +Other commands could be useful during debugging (like `enqueue:topics`) or deployment (like `enqueue:setup-broker`). + * [enqueue:consume](#enqueueconsume) * [enqueue:produce](#enqueueproduce) * [enqueue:setup-broker](#enqueuesetup-broker) diff --git a/docs/images/magento_enqueue_configuration.jpeg b/docs/images/magento_enqueue_configuration.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..73b39731e87a348e8d7119f186de2ad6ecfe3367 GIT binary patch literal 84333 zcmeFa1yr0%x+vPXLr5S%&;$qsC%9X%5Zpb%C5^i^5+D$q00|!49U7NFaCdiiw}$3* z_MDl`p2_TU?pg1?ckW%gvx@as_g`OqQu0|C2ynmTXJTW2`4b2n8X6iV1|}gE7U9dMBu`)dFMsZu0l28}*$Bx9aL)knxNr!# zaCdD0au}XSaKC*3|M7u?M?geEMnOeG$AG<1`2YY9hkyW&h=7EIhzNVz6ZSg*5f|y< zQ&th=M~d%Ip4sBP^ojh2N-0{}g0D1mNX2Gg=Zl8^n1GPz3H5Ut+81=}9GqO-JiKDB z#3dx9q+ctmsH&-JXlfZ68Jn1znOoR9I667IxVrg$@DB+57!({8{W&H!?#tKswDgS3 ztn8fJyt49&$|`VmP3`yAwjb>son76-Bco&E6O&WZOUo;(YwH`ETiZv+C#PrU7nfJp zKk0%4ApDIi*x$bq_D^)-!svoWL_|PD`AHWXyfdsI;36VDWkr4{qKNX&_R+JKKB#!2 zk>5&N&?woI4)G1_hR`2Vu`f{{{Uq%-%KmGF`Tn;k`v+ma(=`piM1X?{4*?e-1h}}S z&6#$I46ew@aAH6LNQ;Y~e-YZK2VG32@3DXeT>-5%qDGB;SIZ zwsTA@X<;Nh#s71PY0n*ioDEbjbc(BmpTd0O(FZ-e0}P5Ib^`IWpwJ1K(%AEJo0Fo$+s+3|43w1j!(Gy8W5(8zVAN3K9-=${po2iTpDKlB0s3?lVqtoUX z)cINl?XARUY1<*@@P4DD6!Pf<$ch`tFZVr}cU_KJR;oI_V(X7RW@i;5r96TV_#tsUoxb9j>6H~Lbk<)w~rG=)tO7hqGd37-P@^qDtR zTJX0VOHMbV!B(MZGV_=uO5bVeFL@DY-(NHn$3^c5_nfL)VnB42+UaLr#9F#aD7H(u zwk#f_QuyLf1egCNU*F%l{MjvSDvCIajVyP7deG@37#|64JX)c!88RqqrbPEt98W

Xs@|0vQFKG1AQ_ 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 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index d8c9258cc..3ec90b99f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -31,6 +31,9 @@ - [Production settings](bundle/production_settings.md) - [Debuging](bundle/debuging.md) - [Functional testing](bundle/functional_testing.md) +* Magento + - [Quick tour](magento/quick_tour.md) + - [Cli commands](magento/cli_commands.md) * Development - [Contribution](contribution.md) diff --git a/docs/magento/cli_commands.md b/docs/magento/cli_commands.md new file mode 100644 index 000000000..e6681b90a --- /dev/null +++ b/docs/magento/cli_commands.md @@ -0,0 +1,142 @@ +# Cli commands + +The enqueue Magento extension provides several commands. +The most useful one `enqueue:consume` connects to the broker and process the messages. +Other commands could be useful during debugging (like `enqueue:topics`) or deployment (like `enqueue:setup-broker`). + +* [enqueue:consume](#enqueueconsume) +* [enqueue:produce](#enqueueproduce) +* [enqueue:setup-broker](#enqueuesetup-broker) +* [enqueue:queues](#enqueuequeues) +* [enqueue:topics](#enqueuetopics) + +## enqueue:consume + +``` +php shell/enqueue.php enqueue:consume --help +Usage: + enqueue:consume [options] [--] []... + enq:c + +Arguments: + client-queue-names Queues to consume messages from + +Options: + --message-limit=MESSAGE-LIMIT Consume n messages and exit + --time-limit=TIME-LIMIT Consume messages during this time + --memory-limit=MEMORY-LIMIT Consume messages until process reaches this memory limit in MB + --setup-broker Creates queues, topics, exchanges, binding etc on broker side. + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A client's worker that processes messages. By default it connects to default queue. It select an appropriate message processor based on a message headers +``` + +## enqueue:produce + +``` +php shell/enqueue.php enqueue:produce --help +Usage: + enqueue:produce + enq:p + +Arguments: + topic A topic to send message to + message A message to send + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A command to send a message to topic +``` + +## enqueue:setup-broker + +``` +php shell/enqueue.php enqueue:setup-broker --help +Usage: + enqueue:setup-broker + enq:sb + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + Creates all required queues +``` + +## enqueue:queues + +``` +/bin/console enqueue:queues --help +Usage: + enqueue:queues + enq:m:q + debug:enqueue:queues + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A command shows all available queues and some information about them. +``` + +## enqueue:topics + +``` +php shell/enqueue.php enqueue:topics --help +Usage: + enqueue:topics + enq:m:t + debug:enqueue:topics + +Options: + -h, --help Display this help message + -q, --quiet Do not output any message + -V, --version Display this application version + --ansi Force ANSI output + --no-ansi Disable ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The environment name [default: "dev"] + --no-debug Switches off debug mode + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: + A command shows all available topics and some information about them. +``` + +[back to index](../index.md) + diff --git a/docs/magento/quick_tour.md b/docs/magento/quick_tour.md new file mode 100644 index 000000000..aa4c361d9 --- /dev/null +++ b/docs/magento/quick_tour.md @@ -0,0 +1,86 @@ +# Magento Enqueue. Quick tour + +## Installation + +We use [composer](https://getcomposer.org/) and [cotya/magento-composer-installer](https://github.com/Cotya/magento-composer-installer) plugin to install magento-enqueue. + +To install libraries run the commands in the application root directory. + +```bash +composer require "magento-hackathon/magento-composer-installer:~3.0" +composer require "enqueue/magento-enqueue:*@dev" "enqueue/amqp-ext" +``` + +## Configuration + +At this stage we have configure the Enqueue extension in Magento backend. +The config is here: System -> Configuration -> Enqueue Message Queue. +Here's the example of Amqp transport that connects to RabbitMQ broker on localhost: + + +![Сonfiguration](../images/magento_enqueue_configu) + +## Publish Message + +To send a message you have to take enqueue helper and call `send` method. + +```php +send('a_topic', 'aMessage'); +``` + +## Message Consumption + +I assume you have `acme` Magento module properly created, configured and registered. +To consume messages you have to define a processor class first: + +```php +getBody() -> 'payload' + + return self::ACK; // acknowledge message + // return self::REJECT; // reject message + // return self::REQUEUE; // requeue message + } +} +``` + +than subscribe it to a topic or several topics: + + +```xml + + + + + + + + a_topic + acme/async_foo + + + + + +``` + +and run message consume command: + +```bash +$ php shell/enqueue.php enqueue:consume -vvv --setup-broker +``` + +[back to index](../index.md) \ No newline at end of file