RocketMQ与Hyperf集成实战教程:手把手教您配置RocketMQ扩展包
在本教程中,我们将详细介绍如何在Hyperf框架中使用RocketMQ消息队列。我们将使用Losingbattle/rocketmq-http
这个Composer包来实现这一目标。
前提条件
已经安装了Hyperf框架
已经安装了Composer
对RocketMQ有基础了解
目录
安装RocketMQ扩展包
发布配置文件
RocketMQ基础配置
注意事项
生产者投递实例
消费者订阅实例
1. 安装RocketMQ扩展包
步骤1:打开终端并进入项目目录
cd your_hyperf_project_directory
步骤2:使用Composer引入RocketMQ扩展包
composer require Losingbattle/rocketmq-http
2. 发布配置文件
步骤1:在终端中执行以下命令
php bin/hyperf.php vendor:publish losingbattle/rocketmq-http
这将会把RocketMQ的配置文件发布到app\config\autoload
目录下。
3. RocketMQ基础配置
步骤1:打开配置文件
使用文本编辑器打开app\config\autoload\rocketmq-http.php
。
步骤2:配置文件内容
配置文件的内容应该如下所示:
<?php
declare(strict_types=1);
return [
'host' => env('ROCKETMQ_HTTP_HOST'),
'access_key_id' => env('ROCKETMQ_HTTP_ACCESS_KEY_ID'),
'access_key_secret' => env('ROCKET_MQ_HTTP_ACCESS_KEY_SECRET'),
'instance_id' => env('ROCKET_MQ_HTTP_INSTANCE_ID'),
'concurrent' => [
'limit' => 15,
],
];
这里,host
、access_key_id
、access_key_secret
和instance_id
都是通过环境变量来设置的。您需要在.env
文件中设置这些变量。
4. 注意事项
在多个消费者同时消费同一个
Topic
时,GroupId
不能重复。使用新
GroupId
或者Topic
前,请先前往阿里云消息队列RocketMQ版控制台提前创建。创建消费者时,请将文件放在此路径:
app/Queue/RocketMQ/Consumer/
下,不存在则新建。
5. 生产者投递实例
在控制器
或者任意业务模块代码处,您可以使用以下代码来投递消息到RocketMQ。
// ...(省略其他代码)
use Losingbattle\RocketMqHttp\Producer;
public function index(Producer $producer)
{
// ...(省略其他代码)
$producer = $this->container->get(Producer::class);
$paymentNotifyMessage = new PaymentNotifyMessage();
foreach ($queue_data as $key => $val) {
$paymentNotifyMessage->setMessageBody($key, $val);
}
$producer->produce($paymentNotifyMessage);
// ...(省略其他代码)
}
6. 消费者订阅实例
步骤1:新建消费者文件
在app\RocketMQ\Consumer
下新建Consumer.php
文件。
步骤2:消费者代码
消费者代码应该如下所示:
// ...(省略其他代码)
use Losingbattle\RocketMqHttp\Annotation\Consumer;
use Losingbattle\RocketMqHttp\Message\ConsumerMessage;
use Losingbattle\RocketMqHttp\Result;
/**
* @Consumer(groupId="GID_tim_push", topic="driver_task_order_match", numOfMessages=16, waitSeconds=1, maxConsumption=0)
*/
class OrderMatchTaskPushConsumer extends ConsumerMessage
{
// ...(省略其他代码)
public function consumeMessage($data)
{
// ...(省略其他代码)
return Result::ACK;
}
}
恭喜,您现在已经成功地在Hyperf框架中集成了RocketMQ!这个教程应该为您提供了一个很好的起点,以进一步探索RocketMQ的高级功能。如需更多信息,强烈建议您查阅RocketMQ和Hyperf的官方文档。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,完整转载请注明来自 [ 谷溪雨 ] 。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果