java 开发指南_开发指南(Java)

设置消息接收接口

连接建立后,服务端会立即向SDK推送已订阅的消息。因此,建立连接时,需要提供消息接收接口,用于处理未设置回调的消息。建议在连接之前,调用 setMessageListener 设置消息回调。

您需要通过 MessageCallback接口的consume方法,和调用messageClient的setMessageListener()方法来设置消息接收接口。

consume方法的返回值决定SDK是否发送 ACK(acknowledgement,即回复确认消息)。

设置消息接收接口的方法如下:MessageCallback messageCallback = new MessageCallback() {

@Override

public Action consume(MessageToken messageToken) {

Message m = messageToken.getMessage();

log.info("receive : " + new String(messageToken.getMessage().getPayload()));

return MessageCallback.Action.CommitSuccess;

}

};

messageClient.setMessageListener("/${YourProductKey}/#",messageCallback);

其中:

参数MessageToken指消息回执的消息体。通过MessageToken.getMessage()可获取消息体。MessageToken可以用于手动回复ACK。

消息体包含的内容如下:public class Message {

// 消息体

private byte[] payload;

// Topic

private String topic;

// 消息ID

private String messageId;

// QoS

private int qos;

}

各类型消息的具体格式,请参见

说明 关于设备上下线状态,为避免消息时序紊乱造成影响,建议您根据消息中的lastTime字段来判断最终设备状态。

示例中,messageClient.setMessageListener("/${YourProductKey}/#",messageCallback);用于设置指定Topic回调。

您可以设置为指定Topic回调,也可以设置为通用回调。

指定Topic回调

指定Topic回调的优先级高于通用回调。一条消息匹配到多个Topic时,按字典顺序优先调用,并且仅回调一次。

设置回调时,可以指定带通配符的Topic,如/${YourProductKey}/${YourDeviceName}/# 。

示例: messageClient.setMessageListener("/alEddfaXXXX/device1/#",messageCallback);

//当收到消息的Topic,如"/alEddfaXXXX/device1/update",匹配指定Topic时,会优先调用该回调

通用回调

未指定Topic回调的消息,则调用通用回调。

设置通用回调方法: messageClient.setMessageListener(messageCallback);

//当收到消息topic未匹配到已定指的Topic 回调时,调用该回调

设置回复ACK。

QOS=1的消息消费后,需要回复ACK。支持设置为自动回复ACK和手动回复ACK。默认为自动回复 ACK。本示例中未设置回复 ACK,则默认为自动回复。

自动回复ACK:设置为自动回复ACK后,若MessageCallback.consume的返回值为true, SDK会发送ACK;返回false或抛出异常,则不会返回ACK。对于QOS=1且未回复ACK的消息,服务器会重新发送。

手动回复ACK方法: CompletableFuture ack(MessageToken var1);

调用该方法的请求参数为MessageToken,表示需要回复ACK的消息。该参数值从MessageCallback回调信息中获取。

设置回复ACK示例:client.connect(messageToken -> {

System.out.println(messageToken.getMessage());

asyncHandleMessage(messageToken);

return MessageCallback.Action.CommitAckManually;

});

public void asyncHandleMessage(MessageToken messageToken) {

client.ack(messageToken)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值