Hyperf中RabbitMQ的使用

本文档介绍了在CentOS 7上安装RabbitMQ的详细步骤,包括从官方网站下载erlang和RabbitMQ的rpm包,然后通过yum安装。接着展示了如何启动和管理RabbitMQ服务,以及设置管理界面。此外,还分享了如何创建和使用死信队列以实现延时消息处理的代码示例,涉及Hyperf AMQP组件的使用。

1.简单的使用可以参照官方文档的AMQP组件:https://hyperf.wiki/2.1/#/zh-cn/amqp

2.安装过程参照:https://www.linuxprobe.com/install-rabbitmq-on-centos-7.html

为了防止博客博主关闭博客,写下简要安装步骤

先安装erlang语言,再安装RabbitMQ

到:https://bintray.com/rabbitmq/rpm/erlang 安装erlang

到:https://www.rabbitmq.com/install-rpm.html#downloads 下载rpm文件

rpm -Uvh erlang-23.2.4-1.el7.x86_64.rpm

yum install erlang

yum install rabbitmq-server-3.8.12-1.el7.noarch.rpm

3.启动rabbitmq:

systemctl start rabbitmq-server
systemctl enable rabbitmq-server
systemctl status rabbitmq-server
rabbitmq-plugins enable rabbitmq_management
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”

可以到 http://localhost:15672/ 访问rabbitMQ页面

重置rabbitMQ:

rabbitmqctl  stop_app
rabbitmqctl  reset
rabbitmqctl  start_app
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”

4.接下来才是我们业务所需的代码,因为想实现延时队列,这里需要用到ttl+死信的原理,但是目前先开启配置以后,再注释配置,再换个队列名字就能生效。

原理应该是每次创建死信队列的时候需要先判断有没有这些配置,没有的话配置好以后下次不再重复配置,这样是可以生效的。

明天再试试,搞清楚再来更新。

先贴上死信消费的代码:

declare(strict_types=1);

namespace App\Amqp\Consumer;

use Hyperf\Amqp\Result;
use Hyperf\Amqp\Annotation\Consumer;
use Hyperf\Amqp\Message\ConsumerMessage;
use PhpAmqpLib\Message\AMQPMessage;
use Hyperf\Amqp\Builder\QueueBuilder;

/**
 * @Consumer(exchange="dlx", routingKey="dlx", queue="dlx2", name ="DlxConsumer", nums=1)
 */
class DlxConsumer extends ConsumerMessage
{
    public function consumeMessage($data, AMQPMessage $message): string
    {
        var_dump("DLX",date('Y-m-d H:i:s'),$data);
        return Result::NACK;
    }

    public function getQueueBuilder(): QueueBuilder
    {
        
        $result =  (new QueueBuilder())->setQueue($this->getQueue())
            ->setArguments([
                'x-message-ttl' => ['I', 10 * 1000],
                'x-dead-letter-exchange' => ['S', 'hyperf'],
                'x-dead-letter-routing-key' => ['S', 'hyperf'],
            ]);
            // var_dump("DLX",date('Y-m-d H:i:s'));
            return $result;
    }
}

 

### Hyperf 3.1 使用指南与示例代码 Hyperf 是一个基于 Swoole 的高性能 PHP 框架,支持协程,具有强大的服务治理能力。以下是关于 Hyperf 3.1 版本的使用指南和示例代码。 #### 1. 安装 Hyperf 在开始之前,请确保已安装 PHP 7.4 或更高版本以及 Swoole 扩展。通过 Composer 安装 Hyperf: ```bash composer create-project hyperf/hyperf-skeleton your_project_name "3.1.*" ``` 此命令会创建一个基于 Hyperf 3.1 的项目骨架[^1]。 #### 2. 基本控制器示例 以下是一个简单的控制器示例,展示了如何定义路由和返回响应: ```php <?php namespace App\Controller; use Hyperf\HttpServer\Annotation\GetMapping; use Hyperf\HttpServer\Annotation\Controller; /** * @Controller */ class IndexController { /** * @GetMapping("/") */ public function index() { return 'Hello Hyperf 3.1!'; } } ``` 上述代码定义了一个 `IndexController` 控制器,并通过注解的方式将根路径 `/` 映射到 `index` 方法上[^1]。 #### 3. 配置 Axios 请求拦截器(前端配合) 如果需要从前端调用 Hyperf 后端接口,可以配置 Axios 请求拦截器以自动添加认证令牌: ```javascript // Axios 配置 axios.interceptors.request.use(config => { config.headers['Authorization'] = localStorage.getItem('token'); return config; }); ``` 此代码片段用于在每次请求时自动附加用户的认证令牌[^2]。 #### 4. 消息队列取消回调 在使用 RabbitMQ 等消息队列时,可以通过定义取消回调来处理消费者中断的情况。例如: ```java // 消息取消回调 CancelCallback cancelCallback = consumerTag -> { System.out.println("消费消息被中断!"); }; ``` 当消费者因网络问题或主动关闭连接时,RabbitMQ 将触发该回调函数[^3]。 #### 5. 启动服务 启动 Hyperf 服务可以通过以下命令完成: ```bash php bin/hyperf.php start ``` 这将启动 HTTP 和其他相关服务。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值