https://help.aliyun.com/document_detail/172487.html?spm=a2c4g.11186623.2.23.570c719fqNPeJp#concept-2553070
我用这个官方大大这个月发的demo一直提示我连接失败
https://wenda.workerman.net/question/5741
这个是我设置的参数
我用阿里官方提供的stomp demo是可以连上的
另外官方大大是否可以提供个阿里云 消息队列 RocketMQ 版 的workman demo 官方只提供了http的 tcp暂时没有 https://help.aliyun.com/document_detail/114448.html?spm=a2c4g.11186623.6.589.4a107e80jcLzas
我这没有RocketMQ客户端,你用他们http接口吧
http我看也是用死循环监听 开进程 我没这样搞过 不知道有没有啥问题
发下你的完整调用代码。不要只截图代码片段。 debug设置为true,看下输出日志
发到下面评论了
那个问题解决了 是主题不存在导致的 现在 一启动就断开连接
看阿里云文档例子 61614是ssl端口,你需要把ssl选项加上。 $client = new \Workerman\Stomp\Client('stomp://域名.com:61614', [ 'debug' => true, 'login' => 'xx', 'passcode' => 'xx', 'ssl' =>['verify_peer' => true, 'verify_peer_name' => false] ]);
报错了
文件头部加上 use Workerman\Stomp\Client;
代码示例
<?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Stomp\Client; $worker = new Worker(); $worker->onWorkerStart = function(){ $accessKey = "x"; $accessSecret = "x"; $consumerGroupId = "DEFAULT_GROUP"; //iotInstanceId:购买的实例请填写实例ID,公共实例请填空字符串""。 $iotInstanceId = ""; $timeStamp = round(microtime(true) * 1000); //签名方法:支持hmacmd5,hmacsha1和hmacsha256。 $signMethod = "hmacsha1"; $clientId = "client-1"; //userName组装方法,请参见AMQP客户端接入说明文档。 //若使用二进制传输,则userName需要添加encode=base64参数,服务端会将消息体base64编码后再推送。具体添加方法请参见下一章节“二进制消息体说明”。 $userName = $clientId . "|authMode=aksign" . ",signMethod=" . $signMethod . ",timestamp=" . $timeStamp . ",authId=" . $accessKey . ",iotInstanceId=" . $iotInstanceId . ",consumerGroupId=" . $consumerGroupId . "|"; $signContent = "authId=" . $accessKey . "×tamp=" . $timeStamp; //计算签名,password组装方法,请参见AMQP客户端接入说明文档。 $password = base64_encode(hash_hmac("sha1", $signContent, $accessSecret, $raw_output = TRUE)); $client = new Client('stomp://xxx.iot-amqp.cn-shanghai.aliyuncs.com:61614', array( 'debug' => true, 'login' => $userName, 'passcode' => $password, 'heart_beat' => 30000, 'ssl' => ['verify_peer' => true, 'verify_peer_name' => false], )); $client->onConnect = function(Client $client) { $client->subscribe('/topic/#', function(Client $client, $data) { var_export($data); }); }; $client->onError = function ($e) { echo $e; }; $client->connect(); }; Worker::runAll();
我测试可以连上 但是 只要有消息过来 就直接断开了不知道为啥
只要有消息过来 就直接断开了 然后重连
打开文件 vendor/workerman/stomp/src/Protocols/Stomp.php,找到input方法,echo $buffer;,看下发来的数据格式。
好像没有进来 我打印了没有反应 就直接断了
发布一个消息后立马断开 重连 之后一直在重连
改完代码记得restart。如果没打印,说明你找错文件了。
找到了 截图已发
看到了,阿里云这stomp协议不完善,没有content-length头,导致无法包长无法算出来。我兼容下。
好 麻烦了
更新下 workerman/stomp 到1.0.3或者后续的更高版本
好的 麻烦了
@1:好像一段时间没有消息过来就会断开重连 这个也可以设置心跳吧? $worker->pingInterval = 30; 截图已发
@1:我刚设置了一下 好像没用 还是断开重连了
好像一段时间没有消息过来就会断开 这个也可以设置心跳吧? $worker->pingInterval = 30;
我刚设置了一下 好像没用 还是断开重连了
我不清楚阿里云的有没有心跳。你看下他们文档。有没有心跳,心跳格式
我发最新的回复了 要设置一个参数
https://help.aliyun.com/document_detail/142489.html?spm=5176.11065259.1996646101.searchclickresult.d37857bdHGerOD
更新workerman/stomp 到1.0.4或者后续的更高版本,已经增加了心跳支持。 用法:
$client = new Client('stomp://地址:端口', array( 'debug' => true, 'login' => $userName, 'passcode' => $password, 'heart_beat' => 10000, // 代表10秒发送一个心跳 'ssl' => ['verify_peer' => true, 'verify_peer_name' => false], ));
好的 谢谢
另外官方大大是否可以提供个阿里云 消息队列 RocketMQ 版 的workman demo 官方只提供了http的 tcp暂时没有
https://help.aliyun.com/document_detail/114448.html?spm=a2c4g.11186623.6.589.4a107e80jcLzas
我这没有RocketMQ客户端,你用他们http接口吧
http我看也是用死循环监听 开进程 我没这样搞过 不知道有没有啥问题
发下你的完整调用代码。不要只截图代码片段。
debug设置为true,看下输出日志
发到下面评论了
那个问题解决了
是主题不存在导致的 现在 一启动就断开连接
看阿里云文档例子 61614是ssl端口,你需要把ssl选项加上。
$client = new \Workerman\Stomp\Client('stomp://域名.com:61614', [
'debug' => true,
'login' => 'xx',
'passcode' => 'xx',
'ssl' =>['verify_peer' => true, 'verify_peer_name' => false]
]);
报错了
文件头部加上 use Workerman\Stomp\Client;
代码示例
我测试可以连上 但是 只要有消息过来 就直接断开了不知道为啥
只要有消息过来 就直接断开了 然后重连
打开文件 vendor/workerman/stomp/src/Protocols/Stomp.php,找到input方法,echo $buffer;,看下发来的数据格式。
好像没有进来 我打印了没有反应 就直接断了
发布一个消息后立马断开 重连 之后一直在重连
改完代码记得restart。如果没打印,说明你找错文件了。
找到了 截图已发
看到了,阿里云这stomp协议不完善,没有content-length头,导致无法包长无法算出来。我兼容下。
好 麻烦了
更新下 workerman/stomp 到1.0.3或者后续的更高版本
好的 麻烦了
@1:好像一段时间没有消息过来就会断开重连 这个也可以设置心跳吧?
$worker->pingInterval = 30; 截图已发
@1:我刚设置了一下 好像没用 还是断开重连了
好像一段时间没有消息过来就会断开 这个也可以设置心跳吧?
$worker->pingInterval = 30;
我刚设置了一下 好像没用 还是断开重连了
我不清楚阿里云的有没有心跳。你看下他们文档。有没有心跳,心跳格式
我发最新的回复了 要设置一个参数
https://help.aliyun.com/document_detail/142489.html?spm=5176.11065259.1996646101.searchclickresult.d37857bdHGerOD
更新workerman/stomp 到1.0.4或者后续的更高版本,已经增加了心跳支持。
用法:
好的 谢谢