Tôi đã xem xét chức năng hàng đợi tin nhắn EE, nhưng có vẻ như nó chưa hoàn chỉnh.
Trước 2.1, đã có một triển khai chức năng hợp lý cho phép bạn tạo một etc/queue.xml
để xác định nhà xuất bản, chủ đề, người tiêu dùng và hàng đợi như được mô tả trong tài liệu chính thức: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .
Có những hạn chế như không thể tạo liên kết trừ khi chúng khớp với một chủ đề được xác định trong cấu hình, điều này đã hạn chế tính linh hoạt khi bạn phải xác định tất cả các khả năng chủ đề có thể ở phía trước. Việc thiếu một tập lệnh cài đặt định kỳ cũng có nghĩa là bạn phải thực hiện một chút hack để có được tập lệnh cài đặt để chạy lại.
Kể từ 2.1, nhà xuất bản, chủ đề, người tiêu dùng và các yếu tố ràng buộc etc/queue.xml
đã bị phản đối và cấu hình được phân chia giữa etc/queue.xml
và etc/communication.xml
, như có thể thấy ở đây: https://github.com/magento/magento2-samples/blob/master/sample- mô-đun-mẫu-tin nhắn-hàng đợi / etc / . Lược đồ nhà xuất bản / chủ đề / người tiêu dùng / liên kết không dùng nữa vẫn có thể được sử dụng riêng lẻ, nhưng không kết hợp với lược đồ hàng đợi / môi giới đã sửa đổi.
Tuy nhiên, không ai trong số này xuất hiện trong tài liệu chính thức và không rõ tại sao cấu hình bị tách ra và yêu cầu sao chép trong một số trường hợp. Quan trọng hơn, dường như không có một phương tiện để xác định ràng buộc bây giờ, với tên chủ đề được sử dụng làm khóa định tuyến thay thế. Điều này đến lượt nó cũng làm cho không thể sử dụng các ký tự đặc biệt cho các hàng đợi ràng buộc. Vì vậy, nó dường như đã được tái cấu trúc nhưng mất chức năng.
Trên một lưu ý tích cực, magento/module-amqp
mô-đun hiện sử dụng tập lệnh cài đặt định kỳ để thay đổi cấu hình hàng đợi được cài đặt khi bạn chạy magento setup:upgrade
. Thay đổi này chưa được áp dụng cho magento/module-mysql-mq
mô-đun.
Vì vậy, tôi muốn biết: a) Tôi đã hiểu sai điều này chưa và thực sự có cách nào để tạo ra các ràng buộc và nó linh hoạt hơn vẻ ngoài của nó? b) Tại sao cấu hình bị chia tách?
Một lưu ý phụ, khi tôi đang thử nghiệm điều này, tôi đã sử dụng một trong những ví dụ cấu trúc liên kết từ các hướng dẫn của RabbitMQ tại https://www.rabbitmq.com/tutorials/tutorial-four-php.html :
Cấu hình không dùng nữa này đã đạt được cấu trúc liên kết trong hầu hết các phần:
queue.xml:
<?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="quick.orange.rabbit" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
<topic name="quick.orange.fox" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
<topic name="lazy.pink.rabbit" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
<topic name="lazy.orange.elephant" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
<topic name="lazy.brown.fox" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
<consumer name="consumerOne" queue="queueOne" connection="amqp" class="Example\MessageQueue\Model\Subscriber" method="processMessage" executor="Magento\Framework\MessageQueue\BatchConsumer" />
<consumer name="consumerTwo" queue="queueTwo" connection="amqp" class="Example\MessageQueue\Model\Subscriber" method="processMessage" executor="Magento\Framework\MessageQueue\BatchConsumer" />
<bind queue="queueOne" exchange="magento" topic="*.orange.*" />
<bind queue="queueTwo" exchange="magento" topic="*.*.rabbit" />
<bind queue="queueTwo" exchange="magento" topic="lazy.#" />
</config>
CẬP NHẬT: Tài liệu hiện đã được cập nhật. Ký tự đại diện hiện không được hỗ trợ, do đó tính linh hoạt của việc trao đổi chủ đề được hiển thị bằng không. Vì vậy, tôi đã cố gắng để tạo lại trao đổi trực tiếp sau đây:
truyền thông:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Communication/etc/communication.xsd">
<topic name="orange" request="Example\MessageQueueExample\Api\MessageInterface" />
<topic name="black" request="Example\MessageQueueExample\Api\MessageInterface" />
<topic name="green" request="Example\MessageQueueExample\Api\MessageInterface" />
</config>
queue.xml:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
<broker topic="orange" type="amqp" exchange="magento">
<queue consumer="consumerOne" name="queueOne" handler="Example\MessageQueueExample\Model\Subscriber::processMessage" consumerInstance="Magento\Framework\MessageQueue\Consumer"/>
</broker>
<broker topic="black" type="amqp" exchange="magento">
<queue consumer="consumerTwo" name="queueTwo" handler="Example\MessageQueueExample\Model\Subscriber::processMessage" consumerInstance="Magento\Framework\MessageQueue\Consumer"/>
</broker>
<broker topic="green" type="amqp" exchange="magento">
<queue consumer="consumerTwo" name="queueThree" handler="Example\MessageQueueExample\Model\Subscriber::processMessage" consumerInstance="Magento\Framework\MessageQueue\Consumer"/>
</broker>
</config>
Tuy nhiên, khi bạn điều hành người tiêu dùng, chỉ có chủ đề "xanh" được chuyển đến người tiêu dùng, nó sẽ bỏ qua chủ đề "đen". Vì vậy, có vẻ như điều tốt nhất có thể đạt được là một trao đổi trực tiếp chỉ với một ràng buộc cho mỗi hàng đợi và người tiêu dùng.