tp6使用rabbitmq
时间: 2024-12-26 18:20:55 浏览: 11
### ThinkPHP 6 中集成 RabbitMQ 的教程
#### 安装依赖库
为了使 ThinkPHP 6 能够与 RabbitMQ 进行交互,需要安装 `php-amqplib/rabbitmq` 库。可以通过 Composer 来完成此操作。
```bash
composer require php-amqplib/rabbitmq-stub
```
该命令会自动下载并配置所需的包以便后续开发工作可以顺利开展[^1]。
#### 配置连接参数
创建一个新的文件用于保存 RabbitMQ 的连接设置,在项目根目录下新建名为 `.env` 文件,并加入如下内容:
```plaintext
RABBITMQ_HOST=127.0.0.1
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
```
这些环境变量定义了访问消息队列服务器所需的基本信息[^2]。
#### 创建服务提供者类
在应用的服务容器内注册一个自定义的服务提供者来管理 AMQP 连接实例。于 app/service/AmqpService.php 添加以下 PHP 类代码片段:
```php
<?php
namespace app\service;
use PhpAmqpLib\Connection\AMQPLazyConnect;
use think\Service as BaseService;
class AmqpService extends BaseService {
public function register() {
$this->app->singleton('amqp', function ($app){
return new AMQPLazyConnect(
[
'host' => env('RABBITMQ_HOST'),
'port' => env('RABBITMQ_PORT'),
'user' => env('RABBITMQ_USER'),
'password'=> env('RABBITMQ_PASSWORD')
]
);
});
}
}
```
这段脚本实现了懒加载模式下的持久化 TCP/IP 型网络链接对象构建逻辑[^3]。
#### 发布消息到队列
编写控制器方法用来向指定名称的消息队列发送数据项。假设有一个简单的 HTTP POST 请求接口 `/send_message/{queue}` 可供调用,则可以在对应路由映射位置处实现类似下面的功能模块:
```php
public function sendMessage($queue, Request $request){
try{
/** @var \PhpAmqpLib\Channel\AMQPChannel $channel */
list($connection,$channel)= $this->app['amqp']->connect();
//声明交换机和队列...
$exchangeName = '';
$routingKey = '';
$channel->exchange_declare($exchangeName,'direct',false,true,false);
$channel->queue_declare($queue,false,true,false,false);
//获取请求体中的JSON字符串作为待投递的内容主体部分
$body=$request->getContent();
//发布新消息至目标地址
$msg=new \PhpAmqpLib\Message\AMQPMessage($body,['delivery_mode'=>2]);
$channel->basic_publish($msg,$exchangeName,$routingKey);
echo " [x] Sent ",$body,"\n";
//关闭信道资源释放句柄占用情况
$channel->close();
$connection->close();
return json(['status'=>'success']);
}catch(\Exception $e){
return json([
'error'=>$e->getMessage(),
'code'=>$e->getCode()
]);
}
}
```
上述函数负责处理来自客户端提交过来的数据流,并将其封装成标准格式后转发给后台等待接收的任务执行单元进行下一步加工处理[^4]。
阅读全文