Hyperf使用RabbitMQ消息队列

这篇具有很好参考价值的文章主要介绍了Hyperf使用RabbitMQ消息队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hyperf连接使用RabbitMQ消息中间件

传送门

  1. 使用Docker部署RabbitMQ,->传送门<
  2. 使用Docker部署Hyperf,->传送门-<

部署环境

安装amqp扩展
composer require hyperf/amqp
安装command命令行扩展
composer require hyperf/command
配置参数

假设已经在rabbitmq设置了交换机exchange_test和队列queue_test

新建 /config/autoload/amp.php配置文件,修改地址和用户名密码
<?php
return [
    'default' => [
        'host' => '127.0.0.1',//rabbitmq服务的地址
        'port' => 5672,
        'user' => 'user',
        'password' => '123456',
        'vhost' => '/',
        'concurrent' => [
            'limit' => 1,
        ],
        'pool' => [
            'connections' => 1,
        ],
        'params' => [
            'insist' => false,
            'login_method' => 'AMQPLAIN',
            'login_response' => null,
            'locale' => 'en_US',
            'connection_timeout' => 3.0,
            'read_write_timeout' => 6.0,
            'context' => null,
            'keepalive' => false,
            'heartbeat' => 3,
            'close_on_destruct' => false,
        ],
    ],
    'pool2' => [
        ...
    ]
];

生产数据

创建生产者中间件
php bin/hyperf.php gen:amqp-producer DemoProducer

exchange是交换机,routingKey是队列名

<?php
declare(strict_types=1);
namespace App\Amqp\Producers;
use Hyperf\Amqp\Annotation\Producer;
use Hyperf\Amqp\Message\ProducerMessage;

/**
 * @Producer(exchange="exchange_test", routingKey="queue_test")
 */
class DemoProducer extends ProducerMessage
{
    public function __construct($data)
    {
    	//将收到的数据加入队列
        $this->plyload = $data;
    }
}
创建生产者脚本
php bin/hyperf.php gen:command FooCommand

代码

<?php
declare(strict_types=1);
namespace App\Command;
use Hyperf\Command\Command as HyperfCommand;
use Hyperf\Command\Annotation\Command;
use Hyperf\Amqp\Producer;
use App\Amqp\Producers\DemoProducer;
use Hyperf\Utils\ApplicationContext;

/**
 * @Command
 */
class FooCommand extends HyperfCommand
{
    /**
     * 执行的命令行
     *
     * @var string
     */
    protected $name = 'foo:command';
    public function handle()
    {
		//协程代码,创建1000个协程分别处理
		$wg = new \Hyperf\Utils\WaitGroup();
		$wg->add(1000);// 计数器加1000
		for($i=0;$i<1000;$i++){
			// 创建协程$i
			co(function () use ($wg) {
		    	//amqp代码,将数据加入生产者队列
		        $message = new DemoProducer(['id'=>$i]);
				$producer = ApplicationContext::getContainer()->get(Producer::class);
				$result = $producer->produce($message);					    
			    // 计数器减一
			    $wg->done();
			});
		}
		// 等待所有协程运行完成
		$wg->wait();
    }
}

调用命令行,来生产数据

php bin/hyperf.php foo:command

至此,进入rabbitmq后台,对应的队列里就会有数据。

消费数据

创建消费者中间件
php bin/hyperf.php gen:amqp-consumer DemoConsumer

代码解释如上,多的queue也是队列名,num是进程数

<?php
declare(strict_types=1);
namespace App\Amqp\Consumers;
use Hyperf\Amqp\Annotation\Consumer;
use Hyperf\Amqp\Message\ConsumerMessage;
use Hyperf\Amqp\Result;
use PhpAmqpLib\Message\AMQPMessage;
#[Consumer(exchange: "hyperf", routingKey: "hyperf", queue: "hyperf", nums: 1)]
class DemoConsumer extends ConsumerMessage
{
    public function consumeMessage($data, AMQPMessage $message): string
    {
        print_r($data);
        return Result::ACK;
    }
}

重启框架会自动调用消费者

php bin/hyperf.php start

hyperf使用rabbitmq,amqp,hyperf,docker,rabbitmq,分布式
原创码字不易,喜欢请收藏关注

部分参考自:https://www.bilibili.com/video/BV1de4y1E7Ya/?vd_source=36102b089bcd7ff8177499ba833633e0文章来源地址https://www.toymoban.com/news/detail-548506.html

到了这里,关于Hyperf使用RabbitMQ消息队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • node-red:使用node-red-contrib-amqp节点,实现与RabbitMQ服务器(AMQP)的消息传递

    回到目录   AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。    AMQP的主

    2024年02月03日
    浏览(30)
  • docker使用Dockerfile制做容器(以hyperf为列,开机启动)

    1、Dockerfile文件 1-1、执行命令生成hyperf:latest容器(文件名是Dockerfile可以省略,如果是其它文件名需要写上docker build –f dockerfile文件路径 –t 镜像名称:版本) 2、start.sh脚本 3、启动,重新启动也会执行脚本,后面加上/data/start.sh(启动执行脚本,重新启动也会执行脚本)

    2024年01月21日
    浏览(36)
  • RabbitMQ(基于AMQP的开源消息代理软件)

    (1)介绍 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准 高级消息队列协议 ,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

    2024年02月02日
    浏览(29)
  • RabbitMQ实现延迟消息,RabbitMQ使用死信队列实现延迟消息,RabbitMQ延时队列插件

    假设有一个业务场景:超过30分钟未付款的订单自动关闭,这个功能应该怎么实现? RabbitMQ使用死信队列,可以实现消息的延迟接收。 队列有一个消息过期属性。就像丰巢超过24小时就收费一样,通过设置这个属性,超过了指定事件的消息将会被丢弃。 这个属性交:x-message

    2024年02月13日
    浏览(49)
  • 【云原生 | 27】Docker部署运行开源消息队列实现RabbitMQ

    作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅 ✒️个人主页:小鹏linux 💊个人社区:小鹏linux(个人社区)欢迎您的加入! 目录 1. 关于MQ 1.1 什么是MQ? 1.2 MQ是干什么用的?  1.3 MQ衡量标准  1.4 主流竞品分析  2. 关

    2024年01月20日
    浏览(36)
  • 【RabbitMQ】RabbitMQ 消息的堆积问题 —— 使用惰性队列解决消息的堆积问题

    消息的堆积问题是指在消息队列系统中,当生产者以较快的速度发送消息,而消费者处理消息的速度较慢,导致消息在队列中积累并达到队列的存储上限。在这种情况下,最早被发送的消息可能会在队列中滞留较长时间,直到超过队列的容量上限。当队列已满且没有更多的可

    2024年02月05日
    浏览(37)
  • RabbitMQ 消息队列使用

    同步调用优点: 时效性强,立即得到结果 缺点: 耦合度高 新业务新需求到来时,需要修改代码 性能和吞吐能力下降 调用服务的响应时间为所有服务的时间之和 资源浪费 调用链中的服务在等待时不会释放请求占用的资源 级联失败 一个服务执行失败会导致调用链后续所有服务失

    2024年01月21日
    浏览(41)
  • RabbitMQ-网页使用消息队列

    几种模式 从最简单的开始 添加完新的虚拟机可以看到,当前admin用户的主机访问权限中新增的刚添加的环境 1.1查看交换机 交换机列表中自动新增了刚创建好的虚拟主机相关的预设交换机。一共7个。前面两个 direct类型的交换机,一个是(AMQP default)还有一个是amq.direct,它们

    2024年02月07日
    浏览(32)
  • 消息队列RabbitMQ.01.基本使用

    目录  RabbitMQ的作用 Message queue 释义  问题思考  存在的问题 优化方案  案例分析  带来的好处  消息队列特点  Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ  3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查看日志 6.通过刚才

    2024年01月21日
    浏览(32)
  • Golang使用消息队列(RabbitMQ)

    最近在使用Golang做了一个网盘项目(类似百度网盘),这个网盘项目有一个功能描述如下:用户会删除一个文件到垃圾回收站,回收站的文件有一个时间期限,比如24h,24h后数据库中记录和oss中文件会被删除,在之前的版本中,可以使用定时任务来检查数据库记录中删除时间

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包