Laravel使用Kafka实践教程(从安装到使用0-1)

一、Linux安装Kafka

首先Linux服务器需要安装好Kafka,这里不再具体细说,可以看我前面的文章:Linux搭建Kafka详细一步一步指南(linux启动kafka脚本)-CSDN博客

二、Laravel安装Kafka

复制代码
composer require enqueue/rdkafka:0.10.18

注意:版本号一定要选对!!!至于版本号该怎么选择,这里也不再细说,可以看我前面的文章:Laravel 使用rdkafka_laravel详细教程(实操避坑)_laravel kafka-CSDN博客

三、安装 rdkafka 扩展

根据你的操作系统和 PHP 版本,安装 rdkafka 扩展。你可以参考 rdkafka 扩展的官方文档来完成安装

可参考文章里面【windows】PHP扩展 安装教程,Linux也差不多,下载对应linux的就可以:Laravel 使用rdkafka_laravel详细教程(实操避坑)_laravel kafka-CSDN博客

四、配置 Laravel Enqueue

打开 config/queue.php 文件,找到 connections 数组,并添加以下配置:

php 复制代码
'connections' => [
     //kafka消息队列
     'rdkafka' => [
            'driver' => 'rdkafka',
            'brokers' => env('KAFKA_BROKERS', 'localhost'),
            'topic' => env('KAFKA_TOPIC', 'default_topic'),
            'group_id' => env('KAFKA_GROUP_ID', 'default_group'),
            'security_protocol' => 'plaintext', // 可选配置,根据实际情况设置,安全协议,用于与 Kafka 代理进行通信的协议,plaintext,表示明文通信,可以根据实际情况设置其他支持的安全协议,例如 ssl 或 sasl_ssl
            'sasl_mechanisms' => null, // 可选配置,根据实际情况设置
            'sasl_username' => null, // 可选配置,根据实际情况设置
            'sasl_password' => null, // 可选配置,根据实际情况设置
            'commit_async' => true, // 可选配置,根据实际情况设置
        ],
],

五、创建Job

php 复制代码
<?php

namespace App\Jobs;

use Enqueue\RdKafka\RdKafkaContext;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;

class KafkaMessage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, SerializesModels;

    protected $message;

    /**
     * Create a new job instance.
     *
     * @param  string  $message
     * @return void
     */
    public function __construct(string $message)
    {
        $this->message = $message;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('Received Kafka message: ' . $this->message);
    }
}

六、将消息推送到 Kafka 队列

以下是一个示例,演示如何将消息推送到 Kafka 队列:

php 复制代码
<?php

namespace App\Http\Controllers;

use App\Jobs\ProcessKafkaMessage;
use Illuminate\Http\Request;

class KafkaController extends Controller
{
    public function sendMessage(Request $request)
    {
        $message = $request->input('message');

        KafkaMessage::dispatch($message)
            ->onQueue('kafka')
            ->delay(now()->addSeconds(5));

        return response()->json(['message' => 'Message sent to Kafka']);
    }
}

在这个示例中,将接收到的消息作为参数传递给 KafkaMessage 作业,并将作业推送到名为 "kafka" 的队列上,并设置了延迟时间为 5 秒。

当消息被推送到 Kafka 队列后,作业将自动从队列中获取并执行。在示例中,作业会将接收到的消息记录到日志文件中。

这是一个简单的示例,以演示在 Laravel 中使用 Kafka 消息队列。你可以根据自己的需求进行修改和扩展。记得在使用 Kafka 之前,确保已经设置好正确的 Kafka 连接和主题配置。

七、监听队列消费消息

在 Laravel 中,你可以使用 queue:work Artisan 命令来监听 Kafka 消息队列并处理消息。以下是监听 Kafka 消息队列的步骤:

打开终端,并在项目根目录下执行以下命令来启动 Kafka 消息队列监听器:

bash 复制代码
php artisan queue:work kafka --queue=kafka

这里建议使用Superviso进程管理消息队列监听,可以看我这篇文章,有详细说明:Laravel 队列监听Superviso进程管理(消息队列后台监听)-CSDN博客

希望我的文章能帮助你~ 共同进步~

相关推荐
昵称画1 小时前
交接班记录电子化:三班之间的信息不漏
开发语言·数据库·人工智能·低代码·php
TechWayfarer3 小时前
PHP漏洞被利用,怎么揪出攻击IP?
开发语言·python·tcp/ip·网络安全·php
4SAPI6 小时前
内容生成与文本润色场景下的大模型 API 聚合网关选型指南
人工智能·gateway·php
梦帮科技7 小时前
量子纠缠网络与量子隐形传态攻防:量子中继器信道串扰、纠缠态保真度降解与量子路由劫持
开发语言·网络·人工智能·算法·自动化·php
程序员天天困8 小时前
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
安全·php
hzxxxz8 小时前
PHP引擎两个高危漏洞复盘:计数顺序与旧地址缺陷的机理与处置清单
开发语言·php
马立杰8 小时前
PHP 未授权 RCE 应急响应:CVE-2026-109618 CVE-2026-109619 排查与加固实战
android·开发语言·php
卓豪终端管理9 小时前
300 台终端补丁推送完成 ≠ 漏洞关闭:补丁稽核闭环的状态机与工程落点
网络·数据库·php
校园安全大脑平台9 小时前
校园安全平台过等保二级,开发阶段要注意什么
开发语言·安全·php
Linux运维技术栈10 小时前
近期 PHP 高危安全风险排查与多环境升级实操
开发语言·安全·php