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;
$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();
<?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; });
connectNsqd($nsqdAddrArr)
pub的时候连接nsq,你也可以利用此函数做健康检查
closeNsqdConnection()
关闭nsq的连接
publish($topic,$msg)
消息发送
deferredPublish($topic,$msg,$msec)
延迟消息发送
subscribe($nsq_lookupd,$config,$callback)
消息订阅
timestamp
消息时间戳
attempts
消息的重试次数,(从1开始)
message_id
消息id
payload
消息内容
finish($bev,$msg->message_id)
主动的 ack消息方法
touch($bev,$msg->message_id)
如果你消息执行太长,可以利用次函数告知nsq 你还活着,一般用于执行频率比较规律的场景。
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
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地址的最简单方法是使用或变