coding-linheng/hyperf-rocketmq
Composer 安装命令:
composer require coding-linheng/hyperf-rocketmq
包简介
hyperf 的 aurocketmq 组件
README 文档
README
基于阿里云的rocketmq-php-sdk 修改的 hyperf2.2 的 rocket 组件
任何问题请加QQ群提问:873213948
安装 - install
$ composer require coding-linheng/hyperf-rocketmq
发布配置 vendor:publish
php bin/hyperf.php vendor:publish coding-linheng/hyperf-rocketmq
使用
以下是伪代码,仅供参考
<?php declare(strict_types=1); namespace App\Controller; use Codelin\HyperfRocketmq\Client; use Hyperf\HttpServer\Annotation\AutoController; use MQ\Exception\MessageNotExistException; use MQ\Model\Message; use MQ\Model\TopicMessage; use MQ\MQConsumer; use MQ\MQProducer; use Psr\Container\ContainerInterface; #[AutoController] class IndexController extends AbstractController { protected MQProducer $producer; protected MQConsumer $consumer; public function __construct(ContainerInterface $container) { $this->producer = $container->get(Client::class)->getProducer(); $this->consumer = $container->get(Client::class)->getConsumer(); } public function testProducer() { try { for($i = 1; $i <= 8; $i++) { $publishMessage = new TopicMessage( "test"// 消息内容 ); // 设置属性 $publishMessage->putProperty("a", $i); // 设置分区顺序KEY $publishMessage->setShardingKey($i % 2); // 设置tag $publishMessage->setMessageTag('hyperf-test'); $result = $this->producer->publishMessage($publishMessage); print "Send mq message success. msgId is:" . $result->getMessageId() . ", bodyMD5 is:" . $result->getMessageBodyMD5() . "\n"; } } catch (\Exception $e) { print_r($e->getMessage() . "\n"); } } public function testConsumer() { while(True) { try { // 长轮询消费消息 // 长轮询表示如果topic没有消息则请求会在服务端挂住3s,3s内如果有消息可以消费则立即返回 $messages = $this->consumer->consumeMessage( 5, // 一次最多消费3条(最多可设置为16条) 3 // 长轮询时间3秒(最多可设置为30秒) ); } catch (\Exception $e) { if ($e instanceof MessageNotExistException) { // 没有消息可以消费,接着轮询 printf("No message, contine long polling!RequestId:%s\n", $e->getRequestId()); continue; } print_r($e->getMessage() . "\n"); sleep(3); continue; } var_dump($this->consumer->getMessageTag()); var_dump($messages); print "consume finish, messages:\n"; // 处理业务逻辑 $receiptHandles = array(); /** @var Message $message */ foreach($messages as $message) { $receiptHandles[] = $message->getReceiptHandle(); printf("MessageID:%s TAG:%s BODY:%s \nPublishTime:%d, FirstConsumeTime:%d, \nConsumedTimes:%d, NextConsumeTime:%d,MessageKey:%s\n", $message->getMessageId(), $message->getMessageTag(), $message->getMessageBody(), $message->getPublishTime(), $message->getFirstConsumeTime(), $message->getConsumedTimes(), $message->getNextConsumeTime(), $message->getMessageKey()); print_r($message->getProperties()); } // $message->getNextConsumeTime()前若不确认消息消费成功,则消息会重复消费 // 消息句柄有时间戳,同一条消息每次消费拿到的都不一样 print_r($receiptHandles); try { $this->consumer->ackMessage($receiptHandles); } catch (\Exception $e) { if ($e instanceof AckMessageException) { // 某些消息的句柄可能超时了会导致确认不成功 printf("Ack Error, RequestId:%s\n", $e->getRequestId()); foreach ($e->getAckMessageErrorItems() as $errorItem) { printf("\tReceiptHandle:%s, ErrorCode:%s, ErrorMsg:%s\n", $errorItem->getReceiptHandle(), $errorItem->getErrorCode(), $errorItem->getErrorCode()); } } } print "ack finish\n"; } } public function testPackage() { var_dump($this->consumer); var_dump($this->producer); } }
coding-linheng/hyperf-rocketmq 适用场景与选型建议
coding-linheng/hyperf-rocketmq 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 48 次下载、GitHub Stars 达 4, 最近一次更新时间为 2022 年 03 月 23 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「rocketMq」 「hyperf」 「hyperf-rocketmq」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 coding-linheng/hyperf-rocketmq 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 coding-linheng/hyperf-rocketmq 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 coding-linheng/hyperf-rocketmq 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
统计信息
- 总下载量: 48
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 5
- 点击次数: 5
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-03-23