rabbitmq 如何配置消费者,让一个api 正常返回"ok"后算作完成消费。
作者:互联网
在 RabbitMQ 中配置消费者以确保在 API 正常返回“ok”后算作完成消费,可以使用 Laravel 的队列系统进行处理。以下是实现的步骤和示例代码:
步骤一:安装必要的包
确保安装了 RabbitMQ 的相关包,前文已提到如何安装。
步骤二:创建消费者
在 Laravel 中,消费者通常是通过定义一个 Job 来实现的。你可以参考之前创建 PushToRabbitMQ
的例子。现在我们将创建一个消费者:
php artisan make:job MyRabbitMQConsumer
Bash
然后在 app/Jobs/MyRabbitMQConsumer.php
中实现你的业务逻辑。当你从 RabbitMQ 中获取到消息后,处理完成并成功返回“ok”时,就可以确认消息已被消费。
示例代码
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
class MyRabbitMQConsumer implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
// 创建 RabbitMQ 连接
$connection = new AMQPStreamConnection(
config('queue.connections.rabbitmq.host'),
config('queue.connections.rabbitmq.port'),
config('queue.connections.rabbitmq.user'),
config('queue.connections.rabbitmq.password')
);
$channel = $connection->channel();
// 声明交换机和队列
$channel->queue_declare(config('queue.connections.rabbitmq.queue'), false, true, false, false, false);
// 消费者回调函数
$callback = function (AMQPMessage $msg) {
// 处理消息逻辑
$data = json_decode($msg->body, true);
// 执行你的业务逻辑,比如调用某个 API
$response = $this->callYourApiMethod($data);
// 检查响应是否正常
if ($response === 'ok') {
// 确认消息已被消费
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
} else {
// 在某些情况下重试或做其他处理
}
};
// 设置消费者
$channel->basic_consume(config('queue.connections.rabbitmq.queue'), '', false, false, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
}
protected function callYourApiMethod($data)
{
// 这个方法应该实现你需要的 API 请求
// 示例:调用某个 API,并返回处理结果
return 'ok'; // 这里的返回值应根据实际 API 返回
}
}
PHP
步骤三:配置环境变量
确保在 .env
文件中设置了 RabbitMQ 的连接信息:
RABBITMQ_HOST=your-rabbitmq-host
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_QUEUE=default
Env
步骤四:启动消费者
使用 Laravel 队列监听器来启动消费者。在命令行中运行以下命令:
php artisan queue:work
Bash
总结
以上步骤展示了如何创建一个 RabbitMQ 消费者,使得当 API 返回“ok”后确认消息的消费。在实际应用中,你可以扩展 callYourApiMethod
方法来实现具体的 API 调用逻辑,确保在成功处理后准确地确认消息。
标签: 来源: