Cách tích hợp RabbitMQ với Magento 2.2. * EE


7

Cách thiết lập hàng đợi magento trong M2 EE 2.2. * Khác với cách sử dụng trong phiên bản trước 2.2. *. Các queue.xmlbị phản đối và có 3 file cấu hình mới queue_consumer.xml, queue_publisher.xmlqueue_topology.xml.

Tôi đã làm việc trong một dự án để tích hợp Xô AWS S3 với Magento. Nhiệm vụ này sử dụng các công nghệ tuyệt vời khác nhau, một trong số đó là RabbitMQ.

Vì vậy, bên dưới là câu trả lời có thể hoặc không tiết kiệm thời gian khi thiết lập hàng đợi tin nhắn trong Magento 2.2. *

Câu trả lời:


8

Yêu cầu trước

  1. ThỏMQ
  2. Magento EE (Nếu bạn đang ở CE bạn có thể sử dụng này mở rộng, câu trả lời này sẽ không giúp bạn thiết lập với phần mở rộng đó.)
  3. Biết những điều cơ bản của giao thức MQ ở đây một sơ đồ hữu ích

Làm thế nào để bắt đầu?

Mọi thứ bắt đầu từ communication.xmltệp (Tôi giả sử bạn đang tạo một mô-đun mới), trong đó bạn xác định chủ đề cho các trao đổi, chủ đề được sử dụng để liên kết với hàng đợi. Đây là mẫu:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
    <topic name="productImport.topic" request="string" />
</config>

Bây giờ chúng ta cần nói với magento cổng và máy chủ RabbitMQ đang ở trong đó env.php.

'queue' => 
  array (
    'amqp' => 
    array (
      'host' => '127.0.0.1',
      'port' => '5672',
      'user' => 'username',
      'password' => 'password',
      'virtualhost' => '/',
      'ssl' => '',
    ),
  ),

Sau đó queue_topology.xml, tệp này chịu trách nhiệm tạo quy tắc định tuyến, hàng đợi và trao đổi.

<?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue_topology.xsd">
        <exchange name="product-import-exchange1" type="topic" connection="amqp">
            <binding id="productImportBinding1" topic="productImport.topic" destinationType="queue" destination="productImport-queue"/>
        </exchange>
    </config>

Sau đó, chúng ta có queue_publisher.xml, điều này xác định kết nối bộ chuyển đổi và kết nối nào sẽ được sử dụng cho một chủ đề cụ thể.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue_publisher.xsd">
    <publisher topic="productImport.topic">
        <connection name="amqp" exchange="porduct-import-exchange1" />
    </publisher>
</config>

Cho đến thời điểm này khi bạn thực hiện cài đặt: cập nhật, bạn sẽ có thể thấy product-import-exchange1trong danh sách trao đổi và productImport-queuetrong danh sách hàng đợi trong rabbitMQ, bạn không cần phải thiết lập thủ công hàng đợi hoặc trao đổi trong rabbitMQ vì Magento EE thực hiện điều này cho bạn đã.

Bây giờ chúng ta cần tạo một lớp nhà xuất bản, lớp này sẽ chịu trách nhiệm xuất bản thông báo mới vào hàng đợi của chúng tôi trong rabbitMQ. Nó sẽ trông giống như thế này

class ImagePublisher
{
    const TOPIC_NAME = "productImport.topic";

    /**
     * @var PublisherInterface
     */
    protected $publisher;

    /**
     * ImagePublisher constructor.
     *
     * @param   PublisherInterface  $publisher
     */
    public function __construct(
        PublisherInterface $publisher
    ) {
        $this->publisher = $publisher;
    }

    /**
     * Build and publishes message to RabbitMQ.
     *
     * @param   array   $data
     * @return  void
     */
    public function publish(array $data)
    {
        $this->publisher->publish(self::TOPIC_NAME, json_encode($data));
    }
}

Đảm bảo loại dữ liệu bạn đang gửi khớp với tập dữ liệu trong communication.xml requestthuộc tính. Bạn có thể làm một cái gì đó như thế này để kiểm tra xem rabbitMQ có nhận được bất kỳ tin nhắn nào không.

$count = 1;
while ($count <= 10000) {
   // @var ImagePublisher $publisher
   $publisher->publish(array("id" => $count));
   $count++;
}

Điều cuối cùng bạn cần làm là tạo ra một người tiêu dùng hoặc người tiêu dùng. Bạn xác định người tiêu dùng trong queue_consumer.xml. Đây là những gì nó sẽ trông như:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue_consumer.xsd">
    <consumer name="productimport.consumer.one" queue="productImport-queue" connection="amqp" handler="CLASS_TO_PROCESS_MESSAGE::METHOD"/>
</config>

Bây giờ hãy kiểm tra xem người tiêu dùng có tồn tại không bin/magento queue:consumers:list, cũng đảm bảo bạn xây dựng lớp tiêu dùng của mình, được xác định trong thuộc tính xử lý của queue_consumer.xml.

Để bắt đầu người tiêu dùng, bạn sử dụng như sau : bin/magento queue:consumers:start CONSUMER_NAME.

Người giới thiệu

Hướng dẫn của RabbitMQ

Hướng dẫn Magento 2.2.2

Magento Di chuyển 2.1 Hàng đợi đến 2.2

Bắt đầu với rabbitMQ và PHP

Cũng có một cái nhìn tại các mô-đun module-scalable-checkoutmodule-scalable-inventory.


Sẽ tốt hơn nếu bạn thêm đường dẫn thư mục của các tệp trên.
Ashar Riaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.