阿里物联网套件-服务端SDK学习实践(基础篇-11发消息到指定的Topic)

发消息到指定的Topic

官网链接

public class PubTest {

    public static void main(String[] args) {

        DefaultAcsClient client = BaseTest.init();

        PubRequest pub = new PubRequest();
        pub.setProductKey("******");
        pub.setMessageContent(Base64.encodeBase64String("hello world".getBytes()));//发送的消息,将消息内容二进制进行BASE64转码后得到的字符串
        pub.setTopicFullName("/******/******/update");//消息发送给哪个设备的哪个topic中,例/ProductKey/设备名称/topic行为
        pub.setQos(0);//设置Qos为1,那么设备如果不在线,重新上线会收到离线消息,消息最多在Iot Hub中保存7天.
        PubResponse response = null;
        try {
            response = client.getAcsResponse(pub);
        } catch (ServerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(ToStringBuilder.reflectionToString(response, ToStringStyle.SHORT_PREFIX_STYLE));
    }
}

打印结果:

PubResponse[requestId=27817C49-EED0-470F-8B96-2A848FA501EB,success=true,errorMessage=<null>]

主要是TopicFullName,在控制台可以通过产品-设备-设备Topic查看相应的值。值的规则大致是/ProductKey/设备名称/topic行为。MessageContent是消息内容,需要Base64转码,可以添加以下工具包的pom.xml文件中,然后就能用例子中的方法转码了。

        <dependency>
            <groupId>commons-codecgroupId>
            <artifactId>commons-codecartifactId>
            <version>1.10version>
        dependency>

按照SDK文档里写的,返回的requestId的描述中还会有(UNKNOW,SUCCESS,TIMEOUT)这些内容,但是目前测试中还没有显示出来,后期使用过程再观察下。

你可能感兴趣的:(阿里物联网套件)