php环境下使用kafka

3 篇文章 0 订阅
2 篇文章 0 订阅

1.安装PHP 扩展

a. 安装librdkafka 库 

官网地址:https://github.com/edenhill/librdkafka 

$  git clone https://github.com/edenhill/librdkafka.git
$  ./configure
$  make
$  sudo make install

b. 安装php-rdkafka 扩展

官网地址:https://github.com/arnaud-lb/php-rdkafka

$ git clone https://github.com/arnaud-lb/php-rdkafka.git

#生成configure文件
$ phpize 

#编译安装
$ ./configure --with-php-config=/usr/local/php7/bin/php-config
$ make
$ make install 

#在php.ini 文件中配置 rdkafka扩展
$ vim /usr/local/php7/etc/php.ini
extension=rdkafka.so

#查看扩展是否生效
$php -m

2.编写producer方法

a.我在model层封装了一个kafka类

<?php
/**
 * Created by PhpStorm.
 * User: wangan
 * Date: 2018/10/17
 * Time: 10:06
 */

namespace App\Models;


class Kafka
{
    public $broker_list = 'localhost:9092';
    public $topic = 'test';
    public $partition = 0;
    protected $producer = null;
    protected $consumer = null;

    public function __construct()
    {
        if($this->broker_list){

        }

        $rk = new \RdKafka\Producer();
        if(empty($rk)){
            throw new \Exception('producer error');
        }
        $rk->setLogLevel(LOG_DEBUG);
        if(!$rk->addBrokers($this->broker_list)){
            throw new \Exception('addBrokers error');
        }
        $this->producer = $rk;
    }

    public function sendMessage($array_message = [])
    {
        $topic = $this->producer->newTopic($this->topic);
        return $topic->produce(RD_KAFKA_PARTITION_UA, $this->partition, json_encode($array_message));
    }

}

b.在controller中调用该方法

 public function testKafkaProducer(){
        $kafuka = new Kafka();
        $kafuka->sendMessage(['cei shi  aaa']);
 }

实现效果如下

可以看到,浏览器没调用一次,下方的消费者都会接受到一个消息。

3.编写异步消费者方法

https://arnaud-lb.github.io/php-rdkafka/phpdoc/rdkafka.examples-high-level-consumer.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值