连接阿里物联网平台 Stomp连接失败

0

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是可以连上的

已邀请:

walkor

赞同来自: 纯黑

发下你的完整调用代码。不要只截图代码片段。
debug设置为true,看下输出日志

纯黑 - 90hou

赞同来自:

另外官方大大是否可以提供个阿里云 消息队列 RocketMQ 版 的workman demo 官方只提供了http的 tcp暂时没有
https://help.aliyun.com/document_detail/114448.html?spm=a2c4g.11186623.6.589.4a107e80jcLzas

纯黑 - 90hou

赞同来自:

截图
那个问题解决了
是主题不存在导致的 现在 一启动就断开连接


截图

纯黑 - 90hou

赞同来自:

截图


截图

walkor

赞同来自:

代码示例


<?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 . "&timestamp=" . $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();

纯黑 - 90hou

赞同来自:

截图
只要有消息过来 就直接断开了 然后重连

纯黑 - 90hou

赞同来自:

截图

纯黑 - 90hou

赞同来自:

截图

纯黑 - 90hou

赞同来自:

截图

纯黑 - 90hou

赞同来自:

截图
好像一段时间没有消息过来就会断开 这个也可以设置心跳吧?
$worker->pingInterval = 30;

walkor

赞同来自:

更新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],
));

要回复问题请先登录注册