开发者社区> 问答> 正文

HTTP/2服务端订阅相关问题

本文介绍HTTP/2服务端订阅的相关问题、原因和解决办法。

展开
收起
请回答1024 2020-03-05 17:13:07 819 0
1 条回答
写回答
取消 提交回答
  • 为什么发布消息报错?

    服务端订阅客户端只能用于订阅物联网平台推送的消息,不能发布消息。如果您用HTTP/2 SDK发布消息,会有如下报错信息:

    • 6095 [nioEventLoopGroup-2-1] ERROR com.aliyun.openservices.iot.api.message.impl.MessageClientImpl - failed to publish message 0, error: failed to publish, code: 400, content: Forbidden.

    • 6095 [nioEventLoopGroup-2-1] INFO com.aliyun.openservices.iot.api.message.impl.MessageClientImpl - give up publishing, message id: 0

    因为配置HTTP/2 SDK时,使用Profile.getAccessKeyProfile 配置连接,表示SDK以订阅者身份接入物联网平台,只能订阅消息,不能发布消息,且subscribe、unsubscribe和publish 三个接口无法使用。

    为什么服务端没有接收到消息?

    您的服务端没有接收到已订阅的消息,原因如下:

    • 该消息是您通过控制台或API下发给设备的消息。服务端订阅仅支持设备端上报云端的消息,不支持订阅下行消息。
    • 有多个消息消费端。如果同时有多个消费端,物联网平台会将消息随机推送到其中一个消费端,并不是每个消费端都会推送。
    • 服务端订阅回调中,存在耗时业务。解决方法:配置HTTP/2 SDK时,需配置收到消息后尽快return CommitSuccess;并且,配置另起线程处理业务。
    • 没有在物联网平台控制台配置服务端订阅。解决方法:请登录物联网平台控制台,在产品的服务端订阅页签下确认。如果没有设置订阅相关消息,请及时设置。

    消息接收慢的原因是什么?

    原因:服务端订阅回调中,可能存在耗时业务。

    解决方法:配置HTTP/2 SDK时,需配置收到消息后尽快return CommitSuccess;并且,配置另起线程处理业务。

    如何进行消息过滤?

    物联网平台会将已订阅的消息全量推送到您的消费端,您需调用setMessageListener进行本地消息过滤,处理指定Topic的消息。具体方法如下:

    setMessageListener(String topic, MessageCallback messageCallback)

    匹配指定Topic的消息到达时,则会调用指定的回调messageCallback处理;不匹配指定Topic的消息到达时,则会调用您在connect中指定的回调处理。

    为什么测试环境会收到线上产品的消息?

    服务端订阅是账号维度的消息推送,无法从产品或设备维度来区分消息。如果不希望在测试环境收到线上产品的消息,建议如下两种处理方式:

    • 使用使用消息服务订阅设备消息。
    • 正式环境和测试环境使用两个阿里云账号。

    HTTP/2 SDK限制

    服务端订阅仅支持 Java 和 .NET 两种语言的SDK,并且两种语言的SDK有以下限制:

    • Java SDK仅支持JDK 8环境。
    • .NET 不支持 .NET Core。

    服务端订阅如何收费?

    服务端订阅按照消息数量计费。具体计费方法,请参见计费方法

    2020-03-05 17:17:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路 立即下载
CDN助力企业网站进入HTTPS时代 立即下载
低代码开发师(初级)实战教程 立即下载