php-nsq

NSQ 的 PHP 客户端
授权协议 未知
开发语言 C/C++ PHP
所属分类 服务器软件、 JMS/消息中间件
软件类型 开源软件
地区 国产
投 递 者 锺离刚洁
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

php-nsq

php-nsq 是nsq的php客户端,采用c扩展编写,性能和稳定性。

安装 :

请提前安装libevent

Dependencies: libevent  (apt-get install libevent-dev ,yum install libevent-devel)

1. sudo phpize
2. ./configure 
3. make  
4. make install  

add in your php.ini:

extension = nsq.so;

 pub例子:

$nsqdAddr = array(
    "127.0.0.1:4150",
    "127.0.0.1:4154"
);

$nsq = new Nsq();
$isTrue = $nsq->connectNsqd($nsqdAddr);

for($i = 0; $i < 10000; $i++){
    $nsq->publish("test", "nihao");
}
$nsq->closeNsqdConnection();

// Deferred publish 
//function : deferredPublish(string topic,string message, int millisecond); 
//millisecond default : [0 < millisecond < 3600000]

$deferred = new Nsq();
$isTrue = $deferred->connectNsqd($nsqdAddr);
for($i = 0; $i < 20; $i++){
    $deferred->deferredPublish("test", "message daly", 3000); 
}
$deferred->closeNsqdConnection();

 sub例子:

<?php 

//sub

$nsq_lookupd = new NsqLookupd("127.0.0.1:4161"); //the nsqlookupd http addr
$nsq = new Nsq();
$config = array(
    "topic" => "test",
    "channel" => "struggle",
    "rdy" => 2,                //optional , default 1
    "connect_num" => 1,        //optional , default 1   
    "retry_delay_time" => 5000,  //optional, default 0 , if run callback failed, after 5000 msec, message will be retried
    "auto_finish" => true, //default true
);

$nsq->subscribe($nsq_lookupd, $config, function($msg,$bev){ 

    echo $msg->payload;
    echo $msg->attempts;
    echo $msg->message_id;
    echo $msg->timestamp;


});

Nsq 类方法:

  • connectNsqd($nsqdAddrArr) 
    pub的时候连接nsq,你也可以利用此函数做健康检查

  • closeNsqdConnection() 
    关闭nsq的连接

  • publish($topic,$msg) 
    消息发送

  • deferredPublish($topic,$msg,$msec) 
    延迟消息发送

  • subscribe($nsq_lookupd,$config,$callback) 
    消息订阅

Message 类方法与属性:

  • timestamp 
    消息时间戳

  • attempts 
    消息的重试次数,(从1开始)

  • message_id 
    消息id 

  • payload 
    消息内容

  • finish($bev,$msg->message_id) 
    主动的 ack消息方法

  • touch($bev,$msg->message_id) 
    如果你消息执行太长,可以利用次函数告知nsq 你还活着,一般用于执行频率比较规律的场景。

Tips :

1.如果callback内需要外部变量,可以采用以下use的写法: 

$nsq->subscribe($nsq_lookupd, $config, function($msg,$bev) use ($you_variable){ 

    echo $msg->payload;
    echo $msg->attempts;
    echo $msg->message_id;
    echo $msg->timestamp;


});

 2.消息重试,只要抛异常就可以,切记不要陷入死循环,超过自己觉得可以的次数 要return: 

subscribe($nsq_lookupd, $config, function($msg){ 
    try{
        echo $msg->payload . " " . "attempts:".$msg->attempts."\n";
        //do something
    }catch(Exception $e){

        if($msg->attempts < 3){
            //the message will be retried after you configure retry_delay_time 
            throw new Exception(""); 
        }else{
            echo $e->getMessage();
            return;
        }
    }

});

3.如果你想增加 客户端的心跳时间与消息的超时时间 :

 第一步 在nsqd启动时要加入相关参数,这个参数是最大的限制,比如--max-heartbeat-interval=1m30s 心跳时间最大不能超过1分30秒:

      nsqd --lookupd-tcp-address=127.0.0.1:4160 --max-heartbeat-interval=1m30s --msg-timeout=10m30s

第二步  因为第一步是指定最大时间,所以还需要第二步在客户端指定所需要的值 具体请看 example目录中的identify开头的文件例子。

4.如果你想增强消费能力,可以加大rdy参数

5.你可以用supervisor管理,但是因为是多进程消费,你需要在supervisor job的配置文件 添加: 

    stopasgroup=true
    killasgroup=true

Changes

  • 3.0

    • 修复因libevent 超过4096消息被截断问题

    • 增加identify指令功能,可以增加客户端心跳时间 与 消息超时时间

  • 2.4.0

    • 修复 pub bug

    • 修复 sub coredump

    • 修覆盖 touch bug

    • 增加等待,当刚初始化的topic没消息时

  • 2.3.1

    • pub支持域名

    • 修复 pub coredump

  • php-nsq NSQ client for php7 . QQ Group : 616063018 intall : Dependencies: libevent (apt-get install libevent-dev ,yum install libevent-devel) pecl install nsq or: 1. sudo phpize 2. ./configure 3. make

  • NSQ PHP CLIENT Reference namespace: Kdt\Iron\Queue\Queue class Queue function push(string $topic, mixed $message) : bool 发布单个消息 $message 为 Kdt\Iron\Queue\Message 对象 或简单类型,如 string, array,使用 Message 对象

  • NSQ PHP CLIENT Reference namespace: Kdt\Iron\Queue\Queue class Queue function push(string $topic, mixed $message) : bool 发布单个消息 $message 为 Kdt\Iron\Queue\Message 对象 或简单类型,如 string, array,使用 Message 对象

  • /* +----------------------------------------------------------------------+ | Copyright (c) 1997-2017 The PHP Group | +----------------------------------------------------------------------+ | This so

  • NSQ服务器及PHP客户端搭建 在对比了市面上多款消息队列之后,基于我们研发团队的现状,我决定选用nsq作为我们的消息队列。其最吸引我的特性倒并非是高并发,水平扩展;而是支持HTTP请求,使用简单。然而NSQ的文档不够详尽,社区不够活跃的问题真让我耗费了很长时间才搞定。 GOLANG安装: NSQ基于GO语言,先安装Go,问题不大,注意与NSQ要求的版本相适应,我选用的go1.9 下载标准安装包

  • 创作不易感谢支持。 一条主写Go和PHP的小菜鸟。平常有时间喜欢自己写点东西,如有不对的地方,欢迎大佬指点。 个人博客:太阳上的雨天 地址:http://blog.caixiaoxin.cn 善于分享,希望有助他人. 非常感谢各位大佬的关注和支持 Go操作nsq 一. 基于docker-compose 搭建nsq集群 二. nsq 简单了解 nsqd:一个负责接收、排队、转发消息到客户端的守护进程

  • NSQ是一个内存+磁盘型的消息中间件,它使用push流的方式源源不断把消息推送给客户端,并且为了使服务端更加简单、高效,NSQ并不提供有序的消息队列。因此,如果对消息有顺序要求,只有两种解决办法: 改用类似kafka之类的有序消息队列; 生产者和消费者达成一个协议,比如增加一个序列号或者时间戳来表示顺序。 本文要介绍的是第二种方法,下面就来简单用golang实现一个有序的NSQ顺序消息队列。 首先

  • [TOC] > NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异 ## 安装NSQ服务端 ### 下载地址 > https://nsq.io/deployment/installing.html 下载linux最新稳定版 ### 启动nsqlookupd > 主要负责服务发现 负责nsqd的心跳、状态监测,给客户端、nsqadmin提供nsqd地址与状态 ~~~ ./nsql

  • #!/usr/local/bin/php $type = $argv[1]; $ip = "10.10.10.110"; $worker_id = 1; if ($type == "start") { myexec("nsqlookupd -http-address=\"0.0.0.0:4161\" -tcp-address=\"0.0.0.0:4160\" -broadcast-address=

  • 最近看了看nsq的协议 发现比较简单,搜了一下php的客户端 要么是扩展、要么需要swoole、要么很复杂。于是自己撸了一个 支持php5.6+ 仓库地址:https://github.com/lizhichao/one-nsq 安装 composer require lizhichao/one-nsq 例子 $ct = new \OneNsq\Client('tcp://127.0.0.1:

 相关资料
  • 我正在尝试使用第三方组织提供的web服务。 服务的URL如下 有几个帖子带有相同的错误消息。我在这里阅读了这篇文章,并通过向客户端添加这些设置来尝试它: 之后,服务器根本没有响应! 所以,我有点被困在这里了。有人能把我推到正确的方向吗?

  • 问题内容: 我想在我的Elasticsearch php客户端到我的Elasticsearch服务器之间配置一个小的超时。 我试图将一些参数传递给耗时的客户端,但这似乎不起作用。这是代码: 我搜索发现可能是由于在cURL层中设置了超时(低于guzzle而引起的问题 限制了与Guzzle HTTP PHP客户端的连接时间 我想我需要以某种方式将CURLOPT_CONNECTTIMEOUT_MS参数设

  • 本文向大家介绍linux下安装php的memcached客户端,包括了linux下安装php的memcached客户端的使用技巧和注意事项,需要的朋友参考一下 下面将介绍安装php的memcached客户端安装步骤 1、下载安装libmemcached客户端 官网地址:http://libmemcached.org/libMemcached.html 2、下载安装memcached 官网地址:ht

  • 本文向大家介绍详解php与ethereum客户端交互,包括了详解php与ethereum客户端交互的使用技巧和注意事项,需要的朋友参考一下 php与ethereum rpc server通信 一、Json RPC Json RPC就是基于json的远程过程调用,这么解释比较抽象。简单来说,就是post一个json格式的数据调用rpc server中的方法. 而这个json格式是固定的, 总的来说有

  • 本文向大家介绍PHP获取真实客户端的真实IP,包括了PHP获取真实客户端的真实IP的使用技巧和注意事项,需要的朋友参考一下 REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。 HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被

  • 我刚开始使用某种REST协议,在从cURL请求中取回访问令牌时遇到了困难。

  • 我想在我的本地主机上测试google plus api php客户端,但它不像他们说的那样工作。你能指导我做什么吗? require_once realpath(dirname(FILE).'google-api-php-client/src/google/autoload.php'); 这里的错误:warning:require_once(d:\xampp\htdocs\google_api):

  • 问题内容: 我想获取使用我网站的客户IP地址。我正在使用PHP superglobal: 但是我看到它不能使用此提供正确的IP地址。我得到了我的IP地址,发现它与我的IP地址不同,并且我还可以在某些网站上看到我的IP地址,例如: 我粘贴了提供PHP功能的IP地址,但是此网站未显示任何结果。这个问题是怎么发生的,如何获得客户端的IP地址? 问题答案: 获取访问者/客户的IP地址的最简单方法是使用或变