狠狠撸

狠狠撸Share a Scribd company logo
? 2019 Magento, Inc. Page | 1
Magento 2.3
Using MySQL For Queues
? 2019 Magento, Inc.
.
Page | 2
Senior Software Developer at BORN Group
Renu Mishra
? 2019 Magento, Inc. Page | 3
Agenda
? 2019 Magento, Inc. Page | 4
Agenda
? Need Of Queue
? Introduction to Queues
? Creating Queues with MySQL
? Publishing messages to Queue
? Consuming the published message
? 2019 Magento, Inc. Page | 5
Not In Scope
? 2019 Magento, Inc. Page | 6
Not In Scope
? Parallel Consumer processing.
? Batch Processing.
? AMQP Implementation (RabbitMQ).
? Advanced Error handling (Rejecting and Re-queuing).
? Supervisiord for consumer monitoring.
? 2019 Magento, Inc. Page | 7
What is Queue and it’s
uses ?
? 2019 Magento, Inc. Page | 8
What is Queue and it’s uses ?
? It distribute load across the application allowing work to placed in a
queue and process independently.
? Received and processes the message asynchronously.
? It also includes a mechanism for storing undelivered messages.
? Queue works in background. It has no frontend user interaction.
? 2019 Magento, Inc. Page | 9
Introduction Of Queue
? 2019 Magento, Inc. Page | 10
Queue Processing Diagram
Routes
? 2019 Magento, Inc. Page | 11
Queue Processing Description
? A publisher is configured to send messages to a topic.
? A topic is a way to categorize messages to consumers.
? A consumer is configured to listen for messages with specific topics.
? Queues route topics to consumers.
? Consumers accept messages and perform actions on them.
? 2019 Magento, Inc. Page | 12
Enough Talk Let’s Get
Started!
? 2019 Magento, Inc. Page | 13
Registering The Module
? 2019 Magento, Inc. Page | 14
<module_root>/registration.php
? 2019 Magento, Inc. Page | 15
<module_root>/etc/module.xml
? 2019 Magento, Inc. Page | 16
Let’s Creates the Queue Files
Now
? 2019 Magento, Inc. Page | 17
Declaring The Publisher
? 2019 Magento, Inc. Page | 18
Send the message to broker
? 2019 Magento, Inc. Page | 19
<module_root>/etc/publisher.xml
? 2019 Magento, Inc. Page | 20
<module_root>/etc/publisher.xml
- publisher element
- topic : The name of the topic.Wildcards character are not supported.
- connection element
- name : For AMQP connections, the connection name must match the
connection attribute in the queue_topology.xml file. Otherwise,
the connection name must be db.
- exchange : The name of the exchange to publish to. The default
system exchange name is magento.
? 2019 Magento, Inc. Page | 21
<module_root>/etc/communication.xml
? 2019 Magento, Inc. Page | 22
<module_root>/etc/communication.xml
- topic element
- name : A string that uniquely identifies the topic.Wildcards character
are not supported in the communication.xml file(*,%,[] and so on).
- request : Specifies the data type of the topic.
- handler element
- name : A string that uniquely defines the handler.
- type : The class that defines the handler.
- method : The method this handler executes.
? 2019 Magento, Inc. Page | 23
Declare The Broker
? 2019 Magento, Inc. Page | 24
Receive the Data From
Producer/Publisher
? 2019 Magento, Inc. Page | 25
<module_root>/etc/queue.xml
? 2019 Magento, Inc. Page | 26
<module_root>/etc/queue.xml
- broker element
- topic : A topic defined in the communication.xml file.
- exchange : The name of the exchange to publish to. The default
system exchange name is magento
- type : The type of message broker. For this release, the value
must be amqp or db.
? 2019 Magento, Inc. Page | 27
<module_root>/etc/queue.xml
- queue element
- name : Defines the queue name to send the message to.
- consumer : The name of the consumer.
- consumerInstance : The path to a Magento class that consumes the
message.
- handler : Specifies the class and method that processes the
message. The value must be specified in the format
<Vendor>Module<ServiceName>::<methodName>.
? 2019 Magento, Inc. Page | 28
Declaring The Topology
? 2019 Magento, Inc. Page | 29
Queue route topics to consumers
? 2019 Magento, Inc. Page | 30
<module_root>/etc/queue_topology.xml
? 2019 Magento, Inc. Page | 31
<module_root>/etc/queue_topology.xml
- exchange element
- name : A unique ID for the exchange.
- type : Specifies the type of exchange. Must be topic.
- connection : For AMQP connections, a string that identifies the
connection. For MySQL connections, the connection
name must be db.
? 2019 Magento, Inc. Page | 32
<module_root>/etc/queue_topology.xml
- binding element
- id : A unique ID for this binding.
- topic : The name of a topic.
- destinationType : Must be queue.
- destination : Identifies the name of a queue.
? 2019 Magento, Inc. Page | 33
Declaring The Consumer
? 2019 Magento, Inc. Page | 34
Consume the publish message
Routes
? 2019 Magento, Inc. Page | 35
<module_root>/etc/queue_consumer.xml
? 2019 Magento, Inc. Page | 36
<module_root>/etc/queue_consumer.xml
- consumer element
- name : The name of the consumer.
- queue : Defines the queue name to send the message to.
- handler : Specifies the class and method that processes the message.
The value must be specified in the format
<Vendor>Module<ServiceName>::<methodName>.
- consumerInstance : The Magento class name that consumes the
message
- connection : For AMQP connections, the connection name must match
the connection attribute in the queue_topology.xml file.
Otherwise, the connection name must be db.
? 2019 Magento, Inc. Page | 37
So many files right ?
? 2019 Magento, Inc. Page | 38
Enough XMLs now its PHP
time !!
? 2019 Magento, Inc. Page | 39
Request Class Declaration
? 2019 Magento, Inc. Page | 40
Requested Class in Communication.xml
? 2019 Magento, Inc. Page | 41
Requested Class Interface
? 2019 Magento, Inc. Page | 42
Concrete Class
Declaration
? 2019 Magento, Inc. Page | 43
Concrete Class declare in etc/di.xml
? 2019 Magento, Inc. Page | 44
Concrete Class Implementation
? 2019 Magento, Inc. Page | 45
Publishing The Message
? 2019 Magento, Inc. Page | 46
Publish The Message in Controller
? 2019 Magento, Inc. Page | 47
MagentoFrameworkMessageQueuePu
blisherInterface
? 2019 Magento, Inc. Page | 48
Publish The Message in Controller
? 2019 Magento, Inc. Page | 49
Consume The Message
? 2019 Magento, Inc. Page | 50
Consume The Message
? 2019 Magento, Inc. Page | 51
Finally Code
Implementation Done !!!
? 2019 Magento, Inc. Page | 52
Execute The Queue
? 2019 Magento, Inc. Page | 53
Wait we need to run the
command before
executing the Queue
? 2019 Magento, Inc. Page | 54
Upgrade Command
Install the Queue Module
? 2019 Magento, Inc. Page | 55
What is happening in
background when
command executed ?
? 2019 Magento, Inc. Page | 56
Queue Table
? 2019 Magento, Inc. Page | 57
Now Let’s Publish the
Queue using Controller
? 2019 Magento, Inc. Page | 58
[base_url]/queue1/index/index
? 2019 Magento, Inc. Page | 59
What happen in
background when queue
published?
? 2019 Magento, Inc. Page | 60
queue_message Table
? 2019 Magento, Inc. Page | 61
It’s time to consume the
published message
? 2019 Magento, Inc. Page | 62
View a list of available
message queue
consumers
? 2019 Magento, Inc. Page | 63
View a list of available message queue
consumers
? 2019 Magento, Inc. Page | 64
Command that consume
the message
? 2019 Magento, Inc. Page | 65
Consume the message
? 2019 Magento, Inc. Page | 66
What happen when
consumer start processing
?
? 2019 Magento, Inc. Page | 67
queue_message_status table
? 2019 Magento, Inc. Page | 68
queue_message_status table
? 2019 Magento, Inc. Page | 69
status column in queue_message_status
table
? 2019 Magento, Inc. Page | 70
Queue Execution On
Production
? 2019 Magento, Inc. Page | 71
MySQL Message Queue Setting
Stores > Settings > Configuration > Advanced > System > Cron
? 2019 Magento, Inc. Page | 72
Configure cron job consumer_runner in
app/etc/env.php
? 2019 Magento, Inc. Page | 73
? cron_run - the option for enabling/disabling cron job consumers_runner, by
default is true.
? max_messages - the maximum number of messages for each consumer
that must be processed before consumer terminate, by default is 1000. If it
is 0, then the consumer never stops working.
? consumers - the list of consumers which will be run, by default is empty
array (all consumers are allowed to be run).
consumer_runner parameter Details
? 2019 Magento, Inc. Page | 74
Start message queue consumers
? 2019 Magento, Inc. Page | 75
Start message queue consumers
? 2019 Magento, Inc. Page | 76
Now you know pretty
well about Queue
? 2019 Magento, Inc. Page | 77
Questions ?
? 2019 Magento, Inc. Page | 78
Thank You

More Related Content

Using Magento 2.3 MySQL Queues

  • 1. ? 2019 Magento, Inc. Page | 1 Magento 2.3 Using MySQL For Queues
  • 2. ? 2019 Magento, Inc. . Page | 2 Senior Software Developer at BORN Group Renu Mishra
  • 3. ? 2019 Magento, Inc. Page | 3 Agenda
  • 4. ? 2019 Magento, Inc. Page | 4 Agenda ? Need Of Queue ? Introduction to Queues ? Creating Queues with MySQL ? Publishing messages to Queue ? Consuming the published message
  • 5. ? 2019 Magento, Inc. Page | 5 Not In Scope
  • 6. ? 2019 Magento, Inc. Page | 6 Not In Scope ? Parallel Consumer processing. ? Batch Processing. ? AMQP Implementation (RabbitMQ). ? Advanced Error handling (Rejecting and Re-queuing). ? Supervisiord for consumer monitoring.
  • 7. ? 2019 Magento, Inc. Page | 7 What is Queue and it’s uses ?
  • 8. ? 2019 Magento, Inc. Page | 8 What is Queue and it’s uses ? ? It distribute load across the application allowing work to placed in a queue and process independently. ? Received and processes the message asynchronously. ? It also includes a mechanism for storing undelivered messages. ? Queue works in background. It has no frontend user interaction.
  • 9. ? 2019 Magento, Inc. Page | 9 Introduction Of Queue
  • 10. ? 2019 Magento, Inc. Page | 10 Queue Processing Diagram Routes
  • 11. ? 2019 Magento, Inc. Page | 11 Queue Processing Description ? A publisher is configured to send messages to a topic. ? A topic is a way to categorize messages to consumers. ? A consumer is configured to listen for messages with specific topics. ? Queues route topics to consumers. ? Consumers accept messages and perform actions on them.
  • 12. ? 2019 Magento, Inc. Page | 12 Enough Talk Let’s Get Started!
  • 13. ? 2019 Magento, Inc. Page | 13 Registering The Module
  • 14. ? 2019 Magento, Inc. Page | 14 <module_root>/registration.php
  • 15. ? 2019 Magento, Inc. Page | 15 <module_root>/etc/module.xml
  • 16. ? 2019 Magento, Inc. Page | 16 Let’s Creates the Queue Files Now
  • 17. ? 2019 Magento, Inc. Page | 17 Declaring The Publisher
  • 18. ? 2019 Magento, Inc. Page | 18 Send the message to broker
  • 19. ? 2019 Magento, Inc. Page | 19 <module_root>/etc/publisher.xml
  • 20. ? 2019 Magento, Inc. Page | 20 <module_root>/etc/publisher.xml - publisher element - topic : The name of the topic.Wildcards character are not supported. - connection element - name : For AMQP connections, the connection name must match the connection attribute in the queue_topology.xml file. Otherwise, the connection name must be db. - exchange : The name of the exchange to publish to. The default system exchange name is magento.
  • 21. ? 2019 Magento, Inc. Page | 21 <module_root>/etc/communication.xml
  • 22. ? 2019 Magento, Inc. Page | 22 <module_root>/etc/communication.xml - topic element - name : A string that uniquely identifies the topic.Wildcards character are not supported in the communication.xml file(*,%,[] and so on). - request : Specifies the data type of the topic. - handler element - name : A string that uniquely defines the handler. - type : The class that defines the handler. - method : The method this handler executes.
  • 23. ? 2019 Magento, Inc. Page | 23 Declare The Broker
  • 24. ? 2019 Magento, Inc. Page | 24 Receive the Data From Producer/Publisher
  • 25. ? 2019 Magento, Inc. Page | 25 <module_root>/etc/queue.xml
  • 26. ? 2019 Magento, Inc. Page | 26 <module_root>/etc/queue.xml - broker element - topic : A topic defined in the communication.xml file. - exchange : The name of the exchange to publish to. The default system exchange name is magento - type : The type of message broker. For this release, the value must be amqp or db.
  • 27. ? 2019 Magento, Inc. Page | 27 <module_root>/etc/queue.xml - queue element - name : Defines the queue name to send the message to. - consumer : The name of the consumer. - consumerInstance : The path to a Magento class that consumes the message. - handler : Specifies the class and method that processes the message. The value must be specified in the format <Vendor>Module<ServiceName>::<methodName>.
  • 28. ? 2019 Magento, Inc. Page | 28 Declaring The Topology
  • 29. ? 2019 Magento, Inc. Page | 29 Queue route topics to consumers
  • 30. ? 2019 Magento, Inc. Page | 30 <module_root>/etc/queue_topology.xml
  • 31. ? 2019 Magento, Inc. Page | 31 <module_root>/etc/queue_topology.xml - exchange element - name : A unique ID for the exchange. - type : Specifies the type of exchange. Must be topic. - connection : For AMQP connections, a string that identifies the connection. For MySQL connections, the connection name must be db.
  • 32. ? 2019 Magento, Inc. Page | 32 <module_root>/etc/queue_topology.xml - binding element - id : A unique ID for this binding. - topic : The name of a topic. - destinationType : Must be queue. - destination : Identifies the name of a queue.
  • 33. ? 2019 Magento, Inc. Page | 33 Declaring The Consumer
  • 34. ? 2019 Magento, Inc. Page | 34 Consume the publish message Routes
  • 35. ? 2019 Magento, Inc. Page | 35 <module_root>/etc/queue_consumer.xml
  • 36. ? 2019 Magento, Inc. Page | 36 <module_root>/etc/queue_consumer.xml - consumer element - name : The name of the consumer. - queue : Defines the queue name to send the message to. - handler : Specifies the class and method that processes the message. The value must be specified in the format <Vendor>Module<ServiceName>::<methodName>. - consumerInstance : The Magento class name that consumes the message - connection : For AMQP connections, the connection name must match the connection attribute in the queue_topology.xml file. Otherwise, the connection name must be db.
  • 37. ? 2019 Magento, Inc. Page | 37 So many files right ?
  • 38. ? 2019 Magento, Inc. Page | 38 Enough XMLs now its PHP time !!
  • 39. ? 2019 Magento, Inc. Page | 39 Request Class Declaration
  • 40. ? 2019 Magento, Inc. Page | 40 Requested Class in Communication.xml
  • 41. ? 2019 Magento, Inc. Page | 41 Requested Class Interface
  • 42. ? 2019 Magento, Inc. Page | 42 Concrete Class Declaration
  • 43. ? 2019 Magento, Inc. Page | 43 Concrete Class declare in etc/di.xml
  • 44. ? 2019 Magento, Inc. Page | 44 Concrete Class Implementation
  • 45. ? 2019 Magento, Inc. Page | 45 Publishing The Message
  • 46. ? 2019 Magento, Inc. Page | 46 Publish The Message in Controller
  • 47. ? 2019 Magento, Inc. Page | 47 MagentoFrameworkMessageQueuePu blisherInterface
  • 48. ? 2019 Magento, Inc. Page | 48 Publish The Message in Controller
  • 49. ? 2019 Magento, Inc. Page | 49 Consume The Message
  • 50. ? 2019 Magento, Inc. Page | 50 Consume The Message
  • 51. ? 2019 Magento, Inc. Page | 51 Finally Code Implementation Done !!!
  • 52. ? 2019 Magento, Inc. Page | 52 Execute The Queue
  • 53. ? 2019 Magento, Inc. Page | 53 Wait we need to run the command before executing the Queue
  • 54. ? 2019 Magento, Inc. Page | 54 Upgrade Command Install the Queue Module
  • 55. ? 2019 Magento, Inc. Page | 55 What is happening in background when command executed ?
  • 56. ? 2019 Magento, Inc. Page | 56 Queue Table
  • 57. ? 2019 Magento, Inc. Page | 57 Now Let’s Publish the Queue using Controller
  • 58. ? 2019 Magento, Inc. Page | 58 [base_url]/queue1/index/index
  • 59. ? 2019 Magento, Inc. Page | 59 What happen in background when queue published?
  • 60. ? 2019 Magento, Inc. Page | 60 queue_message Table
  • 61. ? 2019 Magento, Inc. Page | 61 It’s time to consume the published message
  • 62. ? 2019 Magento, Inc. Page | 62 View a list of available message queue consumers
  • 63. ? 2019 Magento, Inc. Page | 63 View a list of available message queue consumers
  • 64. ? 2019 Magento, Inc. Page | 64 Command that consume the message
  • 65. ? 2019 Magento, Inc. Page | 65 Consume the message
  • 66. ? 2019 Magento, Inc. Page | 66 What happen when consumer start processing ?
  • 67. ? 2019 Magento, Inc. Page | 67 queue_message_status table
  • 68. ? 2019 Magento, Inc. Page | 68 queue_message_status table
  • 69. ? 2019 Magento, Inc. Page | 69 status column in queue_message_status table
  • 70. ? 2019 Magento, Inc. Page | 70 Queue Execution On Production
  • 71. ? 2019 Magento, Inc. Page | 71 MySQL Message Queue Setting Stores > Settings > Configuration > Advanced > System > Cron
  • 72. ? 2019 Magento, Inc. Page | 72 Configure cron job consumer_runner in app/etc/env.php
  • 73. ? 2019 Magento, Inc. Page | 73 ? cron_run - the option for enabling/disabling cron job consumers_runner, by default is true. ? max_messages - the maximum number of messages for each consumer that must be processed before consumer terminate, by default is 1000. If it is 0, then the consumer never stops working. ? consumers - the list of consumers which will be run, by default is empty array (all consumers are allowed to be run). consumer_runner parameter Details
  • 74. ? 2019 Magento, Inc. Page | 74 Start message queue consumers
  • 75. ? 2019 Magento, Inc. Page | 75 Start message queue consumers
  • 76. ? 2019 Magento, Inc. Page | 76 Now you know pretty well about Queue
  • 77. ? 2019 Magento, Inc. Page | 77 Questions ?
  • 78. ? 2019 Magento, Inc. Page | 78 Thank You