zoukankan      html  css  js  c++  java
  • 消息列队 php 基于redis 实现

    说明

    消息列队 基于PHP 实现。 之前 用python 的 flower 实现了 列队。  今天这里我们用的是 PHP 来实现; 在实际的业务环境中 PHP 用的多些;

    PHP 实现列队 最重要的是用到了 redis list类型的 的 blPop 方法 的阻塞行为; bLPop方法 会移除list 中的一个元素 并放回该元素, 当list 为空时 可以设置 阻塞时间 过了这个时间会再次检测;以此来实现列队不中断程序检查list ;

    当 详细说明 blpop 详细

    列队添加数据

    http://192.168.1.212:7575/task.php?&type=1&num=200

    向列队中添加200 条测试数据

    <?php
    
    
    function intodata($num=1000){
            $redis=new Redis();
            $redis->connect('redis',6379);
            echo "redis is runimg".$redis->ping();
            //echo "check redis is runing:";
            for ($i=0; $i < $num; $i++) {
                    $data['id']=$i+1;
                    $data['str']=md5(mt_rand(2,2000));
                    $redis->rPush('goods:task',json_encode($data));
            }
            $redis->close();
            return true;
    }
    
    
    
    
    switch ($_GET['type']) {
            case '1':
                    // add...data
                    $num=$_GET['num']?$_GET['num']:10;
                    $adddata=intodata($num);
                    var_dump($adddata);
                    break;
            case '2':
                    # code...
                    break;
            case '3':
                    # code...
                    break;
    
            default:
                    # code...
                    break;
    }
    
    
    执行列队

    php queueBloop.php

    <?php
    $redis=new Redis();
    $redis->connect('redis',6379);
    // 出队
    while (true) {
        // 阻塞设置超时时间为3秒
        $task = $redis->blPop(array('goods:task'), 3);
        if ($task) {
            $redis->rPush('goods:success:task', $task[1]);
            $task = json_decode($task[1], true);
            echo $task['id'] . ':' . $task['cid'] . ':' . 'handle success';
            echo PHP_EOL;
            sleep(1);
        } else {
            echo 'nothing' . PHP_EOL;
            sleep(5);
        }
    }
    
    
    

    运行环境

    参考

  • 相关阅读:
    saltstack配置管理之YAML(二)
    自动化运维之saltstack 简单用法(一)
    异常处理,枚举,泛型
    面向对象二
    面向对象
    python面向对象
    方法(函数),内存空间,数组
    for循环,while循环,do while循环
    if判断,switch语句
    运算符
  • 原文地址:https://www.cnblogs.com/freefei/p/7908170.html
Copyright © 2011-2022 走看看