hyperf中使用訊息中介軟體rabbitmq
阿新 • • 發佈:2020-08-04
1.概述
訊息佇列已經逐漸成為企業IT系統內部通訊的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能,成為非同步RPC的主要手段之一。當今市面上有很多主流的訊息中介軟體,如老牌的ActiveMQ、RabbitMQ,炙手可熱的Kafka,阿里巴巴自主開發RocketMQ等。原理都類似,本文主要基於rabbitmq
2.建立生產者
php bin/hyperf.php gen:amqp-producer DemoProducer
在 DemoProducer 檔案中,我們可以修改@Producer
註解對應的欄位來替換對應的exchange
和routingKey
。 其中payload
__construct
方法,只要最後賦值payload
即可。 示例如下。
<?php declare(strict_types=1); namespace App\Amqp\Producers; use Hyperf\Amqp\Annotation\Producer; use Hyperf\Amqp\Message\ProducerMessage; use App\Models\User; /** * DemoProducer * @Producer(exchange="hyperf", routingKey="hyperf") */ class DemoProducer extends ProducerMessage { public function __construct($id) { // 設定不同 pool $this->poolName = 'pool2'; $user = User::where('id', $id)->first(); $this->payload = [ 'id' => $id, 'data' => $user->toArray() ]; } }
通過di容器建立例項投遞訊息
$message = new DemoProducer(1); $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message);
3.建立消費者
php bin/hyperf.php gen:amqp-consumer DemoConsumer
在 DemoConsumer 檔案中,我們可以修改@Consumer
註解對應的欄位來替換對應的exchange
、routingKey
和queue
$data
就是解析後的訊息資料。 示例如下
<?php declare(strict_types=1); namespace App\Amqp\Consumers; use Hyperf\Amqp\Annotation\Consumer; use Hyperf\Amqp\Message\ConsumerMessage; use Hyperf\Amqp\Result; /** * @Consumer(exchange="hyperf", routingKey="hyperf", queue="hyperf", nums=1) */ class DemoConsumer extends ConsumerMessage { public function consume($data): string { print_r($data); return Result::ACK; } }
更多細節請查閱hyperf官方文件