最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Laravel中Kafka的使用詳解

 更新時間:2021年03月22日 11:19:20   作者:李嵐加洛斯  
這篇文章主要介紹了Laravel中Kafka的使用詳解,kafka是一個分布式消息隊列,具有高性能、持久化、多副本備份、橫向擴展能力,有對于消息隊列感興趣的同學(xué)可以參考下

本文并沒有kafka的安裝教程,本文是針對已經(jīng)安裝kafka及其配置好kafka的php拓展并且使用laravel框架進(jìn)行開發(fā)項目,配置一個可供laravel框架使用的生產(chǎn)及消費者類.

以下代碼修改自本站的YII框架關(guān)于kafka類的代碼,經(jīng)過測試使用在本人的項目中,可正常運行,larvael版本:5.6 代碼放置larvael框架位置:app/Tools/Kafka.php

<?php
namespace App\Tools;
 
use Illuminate\Config\Repository;
 
use Illuminate\Support\Facades\DB;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
 
use Illuminate\Http\Request;
 
class Kafka
{
  public $broker_list = '127.0.0.1';//配置kafka,可以用逗號隔開多個kafka
  public $topic = 'test';//管道名稱
  public $partition = 0;
 
  protected $producer = null;
  protected $consumer = null;
 
  public function __construct()
  {
    if (empty($this->broker_list)) {
      throw new InvalidConfigException("broker not config");
    }
    $rk = new \RdKafka\Producer();
    if (empty($rk)) {
      throw new InvalidConfigException("producer error");
    }
    $rk->setLogLevel(LOG_DEBUG);
    if (!$rk->addBrokers($this->broker_list)) {
      throw new InvalidConfigException("producer error");
    }
    $this->producer = $rk;
  }
 
  /**
   * 生產(chǎn)者
   * @param array $messages
   * @return mixed
   */
  public function send($messages = [],$topic)
  {
    $topic = $this->producer->newTopic($topic);
    return $topic->produce(RD_KAFKA_PARTITION_UA, $this->partition, json_encode($messages));
  }
 
  /**
   * 消費者
   */
  public function consumer($object, $callback){
    $conf = new \RdKafka\Conf();
    $conf->set('group.id', 0);
    $conf->set('metadata.broker.list', $this->broker_list);
 
    $topicConf = new \RdKafka\TopicConf();
    $topicConf->set('auto.offset.reset', 'smallest');
 
    $conf->setDefaultTopicConf($topicConf);
 
    $consumer = new \RdKafka\KafkaConsumer($conf);
 
    $consumer->subscribe([$this->topic]);
 
    echo "waiting for messages.....\n";
    while(true) {
      $message = $consumer->consume(120*1000);
      switch ($message->err) {
        case RD_KAFKA_RESP_ERR_NO_ERROR:
          echo "message payload....";
          $object->$callback($message->payload);
          break;
      }
      sleep(1);
    }
  }
}
?>

在控制器中如何使用:

首先再頭部導(dǎo)入這個類:use App\Tools\Kafka;

下面是使用生產(chǎn)者實例:

public function test(){
 
   $topic = 'tool';//輸入使用管道名稱
   $data['shop_id'] = 58;
   $data['bar_code']=586;
   $data['goods_num'] = 1;
   $data['goods_unit'] = '個';
 
$Kafka = new Kafka();
$Error_Msg = $Kafka->send($data,$topic);//傳入數(shù)組會自動轉(zhuǎn)換json
var_dump($Error_Msg);
 
 
  }

下面是消費者實例,消費者我這里使用了的是php腳本進(jìn)行的操作:

<?php
 
$conf = new RdKafka\Conf();
 
$conf->set('group.id', 'myConsumerGroup');
 
$rk = new RdKafka\Consumer($conf);
$rk->addBrokers("localhost:9092");
 
$topicConf = new RdKafka\TopicConf();
$topicConf->set('auto.commit.interval.ms', 100);
$topicConf->set('offset.store.method', 'file');
$topicConf->set('offset.store.path', sys_get_temp_dir());
$topicConf->set('auto.offset.reset', 'smallest');
 
$topic = $rk->newTopic("tool", $topicConf);//讀取的管道
 
// Start consuming partition 0
$topic->consumeStart(0, RD_KAFKA_OFFSET_STORED);
 
while (true) {
  $message = $topic->consume(0, 120*10000);
  switch ($message->err) {
    case RD_KAFKA_RESP_ERR_NO_ERROR:
    //沒有錯誤打印信息
      $message = json_decode(json_encode($message),true);
      $data = json_decode($message['payload'],true);
      var_dump($data);
      break;
    case RD_KAFKA_RESP_ERR__PARTITION_EOF:
      echo "等待接收信息\n";
      break;
    case RD_KAFKA_RESP_ERR__TIMED_OUT:
      echo "超時\n";
      break;
    default:
      throw new \Exception($message->errstr(), $message->err);
      break;
  }
 sleep(1);
}
 
?>

到此這篇關(guān)于Laravel中Kafka的使用詳解的文章就介紹到這了,更多相關(guān)Laravel中Kafka內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • ThinkPHP中U方法的使用淺析

    ThinkPHP中U方法的使用淺析

    這篇文章主要介紹了ThinkPHP中U方法的使用,需要的朋友可以參考下
    2014-06-06
  • php根據(jù)操作系統(tǒng)轉(zhuǎn)換文件名大小寫的方法

    php根據(jù)操作系統(tǒng)轉(zhuǎn)換文件名大小寫的方法

    這篇文章主要介紹了php根據(jù)操作系統(tǒng)轉(zhuǎn)換文件名大小寫的方法,需要的朋友可以參考下
    2014-02-02
  • php+layui數(shù)據(jù)表格實現(xiàn)數(shù)據(jù)分頁渲染代碼

    php+layui數(shù)據(jù)表格實現(xiàn)數(shù)據(jù)分頁渲染代碼

    今天小編就為大家分享一篇php+layui數(shù)據(jù)表格實現(xiàn)數(shù)據(jù)分頁渲染代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • PHP sdk文檔處理常用代碼示例解析

    PHP sdk文檔處理常用代碼示例解析

    這篇文章主要介紹了PHP sdk文檔處理常用代碼示例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • 利用PHPStorm如何開發(fā)Laravel應(yīng)用詳解

    利用PHPStorm如何開發(fā)Laravel應(yīng)用詳解

    這篇文章主要給大家介紹了關(guān)于利用PHPStorm如何開發(fā)Laravel應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-08-08
  • php遍歷目錄與文件夾的多種方法詳解

    php遍歷目錄與文件夾的多種方法詳解

    介紹幾個php遍歷目錄的方法,可以遍歷目錄及目錄中的文件,供大家參考
    2013-11-11
  • 最新版本PHP 7 vs HHVM 多角度比較

    最新版本PHP 7 vs HHVM 多角度比較

    PHP 7 是 PHP 社區(qū)對 HHVM 的回應(yīng)。PHP 7 發(fā)布的預(yù)覽版本號稱比之前的 PHP 5 的性能要提升100%。不過,PHP 還有一個競爭對手 HHVM (HipHop Virtual Machine) 一個運行 PHP 代碼的虛擬工具。二者直接的比較正在升溫,那么讓我們來看一下他們直接的性能對比吧
    2016-02-02
  • php IIS日志分析搜索引擎爬蟲記錄程序

    php IIS日志分析搜索引擎爬蟲記錄程序

    由于最近比較忙,代碼寫得不怎么規(guī)范,界面也沒有怎么美化,大家先用著吧,以后增加新功能會第一時間發(fā)布給大家!
    2008-08-08
  • Yii框架參數(shù)化查詢中IN查詢只能查詢一個的解決方法

    Yii框架參數(shù)化查詢中IN查詢只能查詢一個的解決方法

    這篇文章主要介紹了Yii框架參數(shù)化查詢中IN查詢只能查詢一個的解決方法,結(jié)合實例形式分析了Yii框架中IN查詢只能查一個的原因及FIND_IN_SET函數(shù)相關(guān)功能與使用技巧,需要的朋友可以參考下
    2017-05-05
  • 最新評論

    绥芬河市| 翁牛特旗| 鲜城| 大宁县| 宝清县| 彭阳县| 双柏县| 黄平县| 诸暨市| 潞西市| 盐池县| 西城区| 平定县| 翼城县| 卓资县| 如皋市| 西乡县| 永宁县| 漠河县| 探索| 蛟河市| 苏尼特左旗| 大港区| 泰顺县| 方城县| 加查县| 苍山县| 蒲江县| 林周县| 宁德市| 房产| 嵩明县| 罗源县| 徐州市| 剑川县| 若尔盖县| 昭苏县| 清水县| 东平县| 扎兰屯市| 贵阳市|