服务器SDK

环信MQTT消息云支持服务器端集成SDK,实现一对多消息发送、获取token、获取客户端连接记录、查询客户端session信息以及查询客户端消息发布&投递记录等功能,本文为服务器端集成MQTT SDK提供对接指导及数据规范。

函数名称描述
createClientSDK初始化
ApplyTokenRequest获取临时访问token
SendMessage发送消息,向指定topic发送消息,支持同时向多个topic发送消息
QueryMqttRecordDevice查询MQTT客户端连接记录,包括连接动作、订阅、发布、断开连接等记录
QuerySessionByClientId查询客户端当前session信息,包括在线状态、最新上线时间、登录用户ID、使用版本、订阅关系等
QueryMqttRecordMessageOfClient查询客户端消息发送&投递记录
QueryMqttRecordMessagePublish查询指定消息的发送记录
QueryMqttRecordMessageSubscribe查询指定消息的投递记录
函数名称createClient()
方法说明初始化
参数名称类型是否必须说明
AppClientIdString开发者Client ID,系统生成,在console【应用概览】→【应用详情】→【开发者ID】下的‘ClientID’获取
AppClientSecretString开发者密钥,在console【应用概览】→【应用详情】→【开发者ID】下的‘ClientSecret’获取
RestApiStringREST API地址,在console【MQTT】→【服务概览】→【服务配置】下的‘REST API地址’获取
代码示例
import com.easemob.sdk.Client;
import com.easemob.sdk.Config;
import com.easemob.sdk.api.*;
import com.easemob.sdk.domain.*;

public class Demo {

    public static Client createClient() {
        Config config = new Config(); // 实例化应用配置类
        config.setAppClientId("YZA63eVgbRHDS9-lmYwBje8t2w")
                .setAppClientSecret("YZA6BaXcq4l8LN8b6ej7sTXqaEdhBsg")
                .setRestApi("https://api.cn1.mqtt.chat/app/vwp0b0");
        Client client = new Client(config);  // 实例化应用客户端
        return client;
    }
}
函数名称ApplyTokenRequest()
方法说明获取临时访问token
参数名称类型是否必须说明
UsernameString环信账户系统中的用户ID,在【应用概览】→【用户认证】下的用户ID创建与获取;
PasswordString环信账户系统中的用户密码,在【应用概览】→【用户认证】下的用户ID创建与获取;
代码示例
public static void main(String[] args) {
        Client client = createClient(); // 创建应用客户端
        /**
         * 获取临时访问Token
         */
        ApplyTokenRequest applyTokenRequest = new ApplyTokenRequest();  // 创建请求参数类
        applyTokenRequest.setUsername("test1");  // 设置请求参数
        applyTokenRequest.setPassword("123456");  // 设置请求参数
        ResponseOk<TokenInfo> responseOk = client.applyToken(applyTokenRequest);  // 调用应用客户端发起请求
        if (responseOk.getCode() == 200) {  // 如果返回code为200,请求正常返回
            String access_toke = responseOk.getBody().getAccess_token(); // 获取返回对象字段值
        }
    }
返回参数类型说明
codeInteger200:获取成功;400:获取失败
msgStringsuccess:获取成功;fail:获取失败
bodyObjectaccess_token:获取到的token;
expires_in:token过期时间;
type:token类型;
username:用户名;
函数名称 SendMessage()
方法说明向指定topic发送消息,支持同时向多个topic发送消息
参数名称类型是否必须说明
topicsString[]主题名称数组,最多32个主题
ClientidString服务器端的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的
【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取
PayloadString消息内容,支持json、xml、raw格式
EncodingString消息体编码方式,支持 plain 与 base64 两种,默认为 plain
QosIntegerQoS等级,默认为0
ExpireInteger消息最大保留时间,单位:秒,取值范围:[86400,259200]
代码示例
public static void main(String[] args) throws Exception {
        Client client = createClient();
        /**
         * 服务端应用发消息
         */
        String[] topics = new String[]{"abc"};
        SendMessage sendMessage = new SendMessage();
        sendMessage.setClientid("deviceId1@vwp0b0");
        sendMessage.setPayload("hello world");
        sendMessage.setTopics(topics);
        ResponseOk<ChatInfo> responseOk = client.sendMessage(sendMessage);
        if (responseOk.getCode() == 200) {
            ChatInfo chatInfo = responseOk.getBody();
        }
    }
返回参数类型说明
codeInteger200:发送成功;400:发送失败
msgStringsuccess:发送成功;fail:发送失败
bodyObjectmids:消息ID列表,与发送消息顺序对应
函数名称QueryMqttRecordDevice()
方法说明查询MQTT客户端连接记录,包括连接动作、订阅、发布、断开连接等记录
参数名称类型是否必须说明
ClientidString待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的
【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取
BeginTimeString查询起始时间
EndTimeString查询结束时间
CurrentPageInteger当前页码,默认1
PageSizeInteger分页大小,默认10
代码示例
public static void main(String[] args) throws Exception {
        Client client = createClient();
        /**
         * 查询MQTT客户端连接记录
         */
        QueryMqttRecordDevice queryMqttRecordDevice = new QueryMqttRecordDevice();
        queryMqttRecordDevice.setBeginTime("2021-08-10 15:00:00");
        queryMqttRecordDevice.setEndTime("2021-08-10 16:00:00");
        queryMqttRecordDevice.setCurrentPage(1);
        queryMqttRecordDevice.setPageSize(10);
        queryMqttRecordDevice.setClientid("deviceId1@vwp0b0");
        ResponseOk<DeviceRecordInfo> responseOk = client.queryMqttRecordDevice(queryMqttRecordDevice);
        if (responseOk.getCode() == 200) {
            DeviceRecordInfo deviceRecordInfo = responseOk.getBody();
        }
    }
返回参数类型说明
codeInteger200:发送成功;400:发送失败
msgStringsuccess:发送成功;fail:发送失败
bodyObjecttotalCount:记录总数;
ts:记录发生时间;
status:记录状态;
reason:记录发生原因;
detail:记录详情
函数名称 QuerySessionByClientId()
方法说明查询客户端当前session信息,包括在线状态、最新上线时间、登录用户ID、使用版本、订阅关系等
参数名称类型是否必须说明
ClientidString待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的
【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取
CurrentPageInteger当前页码,默认1
PageSizeInteger分页大小,默认10
代码示例
public static void main(String[] args) throws Exception {
        Client client = createClient();
        /**
         * 根据Client ID查询指定客户端当前session连接信息
         */
        QuerySessionByClientId querySessionByClientId = new QuerySessionByClientId();
        querySessionByClientId.setClientid("deviceId1@vwp0b0");
        querySessionByClientId.setCurrentPage(1);
        querySessionByClientId.setPageSize(10);
        ResponseOk<ClientInfo> responseOk = client.querySessionByClientId(querySessionByClientId);
        if (responseOk.getCode() == 200) {
            ClientInfo clientInfo = responseOk.getBody();
        }
    }
返回参数类型说明
codeInteger200:查询成功;400:查询失败
msgStringsuccess:查询成功;fail:查询失败
bodyObject status:在线状态,online为在线,offline为离线;
time:最新连接时间;
user:当前登录使用的用户ID;
keepalive:心跳间隔;
cleansession:是否清除会话,true:清除,false:不清除;
will:是否遗嘱消息,true:是,false:否;
version:MQTT版本;
pageSize:订阅主题页面大小;
currentPage:订阅主题当前页;
total:总条数;
topic:订阅的主题名称;
qos:设置的QoS等级
函数名称QueryMqttRecordMessageOfClient()
方法说明查询客户端消息发送&投递记录
参数名称类型是否必须说明
ClientidString待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的
【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取
BeginTimeString查询起始时间
EndTimeString查询结束时间
CurrentPageInteger当前页码,默认1
PageSizeInteger分页大小,默认10
OrderString取值:“ASC”升序,“DESC”降序
代码示例
public static void main(String[] args) throws Exception {
        Client client = createClient();
        /**
         * 查询客户端消息发送&投递记录
         */
        QueryMqttRecordMessageOfClient queryMqttRecordMessageOfClient = new QueryMqttRecordMessageOfClient();
        queryMqttRecordMessageOfClient.setClientid("deviceId1@vwp0b0");
        queryMqttRecordMessageOfClient.setBeginTime("2021-08-10 15:00:00");
        queryMqttRecordMessageOfClient.setEndTime("2021-08-10 16:00:00");
        queryMqttRecordMessageOfClient.setCurrentPage(1);
        queryMqttRecordMessageOfClient.setPageSize(10);
        queryMqttRecordMessageOfClient.setOrder(OrderParams.desc);
        ResponseOk<MqttMessageInfo> responseOk = client.queryMqttRecordMessageOfClient(queryMqttRecordMessageOfClient);
        if(responseOk.getCode() == 200) {
            MqttMessageInfo mqttMessageInfo = responseOk.getBody();
        }
    }
返回参数类型说明
codeInteger200:查询成功;400:查询失败
msgStringsuccess:查询成功;fail:查询失败
bodyObject ts:消息发送/接收时间;
mid:消息ID;
cid:客户端ID;
direction:消息上行/下行,上行:uplink,下行:downlink
函数名称QueryMqttRecordMessagePublish()
方法说明查询指定消息的发送记录
参数名称类型是否必须说明
ClientidString待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的
【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取
MessageidString指定的消息ID
OrderString取值:“ASC”升序,“DESC”降序
代码示例
public static void main(String[] args) throws Exception {
        Client client = createClient();
        /**
         * 查询指定消息的发送记录
         */
        QueryMqttRecordMessagePublish queryMqttRecordMessagePublish = new QueryMqttRecordMessagePublish();
        queryMqttRecordMessagePublish.setClientid("deviceId1@vwp0b0");
        queryMqttRecordMessagePublish.setMessageid("045B93CAB4002000");
        queryMqttRecordMessagePublish.setOrder(OrderParams.desc);
        ResponseOk<MqttMessageInfo> responseOk = client.queryMqttRecordMessagePublish(queryMqttRecordMessagePublish);
        if (responseOk.getCode() == 200) {
            MqttMessageInfo mqttMessageInfo = responseOk.getBody();
        }
    }
返回参数类型说明
codeInteger200:查询成功;400:查询失败
msgStringsuccess:查询成功;fail:查询失败
bodyObject ts:消息发送时间;
mid:消息ID;
cid:发送客户端ID;
status:状态;
topic:消息发送主题;
qos:消息qos等级
函数名称 QueryMqttRecordMessageSubscribe()
方法说明查询指定消息的投递记录
参数名称类型是否必须说明
ClientidString待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的
【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取
MessageidString指定的消息ID
BeginTimeString查询起始时间
EndTimeString查询结束时间
CurrentPageInteger当前页码,默认1
PageSizeInteger分页大小,默认10
OrderString取值:“ASC”升序,“DESC”降序
代码示例
public static void main(String[] args) throws Exception {
        Client client = createClient();
        /**
         * 查询指定消息的投递记录
         */
        QueryMqttRecordMessageSubscribe queryMqttRecordMessageSubscribe = new QueryMqttRecordMessageSubscribe();
        queryMqttRecordMessageSubscribe.setClientid("deviceId1@vwp0b0");
        queryMqttRecordMessageSubscribe.setMessageid("045B93CAB4002000");
        queryMqttRecordMessageSubscribe.setBeginTime("2021-08-10 15:00:00");
        queryMqttRecordMessageSubscribe.setEndTime("2021-08-10 16:00:00");
        queryMqttRecordMessageSubscribe.setCurrentPage(1);
        queryMqttRecordMessageSubscribe.setPageSize(10);
        queryMqttRecordMessageSubscribe.setOrder(OrderParams.desc);
        ResponseOk<MqttMessageInfo> responseOk = client.queryMqttRecordMessageSubscribe(queryMqttRecordMessageSubscribe);
        if (responseOk.getCode() == 200) {
            MqttMessageInfo mqttMessageInfo = responseOk.getBody();
        }
    }
返回参数类型说明
codeInteger200:查询成功;400:查询失败
msgStringsuccess:查询成功;fail:查询失败
bodyObject ts:消息投递时间;
cid:接收客户端ID;
status:状态;
topic:消息投递主题;
qos:消息qos等级
函数名称 QueryMqttRecordMessageSubscribe()
方法说明查询指定消息的投递记录
参数名称类型是否必须说明
ClientidString待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的
【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取
MessageidString指定的消息ID
BeginTimeString查询起始时间
EndTimeString查询结束时间
CurrentPageInteger当前页码,默认1
PageSizeInteger分页大小,默认10
OrderString取值:“ASC”升序,“DESC”降序
代码示例
public static void main(String[] args) throws Exception {
        Client client = createClient();
        /**
         * 查询指定消息的投递记录
         */
        QueryMqttRecordMessageSubscribe queryMqttRecordMessageSubscribe = new QueryMqttRecordMessageSubscribe();
        queryMqttRecordMessageSubscribe.setClientid("deviceId1@vwp0b0");
        queryMqttRecordMessageSubscribe.setMessageid("045B93CAB4002000");
        queryMqttRecordMessageSubscribe.setBeginTime("2021-08-10 15:00:00");
        queryMqttRecordMessageSubscribe.setEndTime("2021-08-10 16:00:00");
        queryMqttRecordMessageSubscribe.setCurrentPage(1);
        queryMqttRecordMessageSubscribe.setPageSize(10);
        queryMqttRecordMessageSubscribe.setOrder(OrderParams.desc);
        ResponseOk<MqttMessageInfo> responseOk = client.queryMqttRecordMessageSubscribe(queryMqttRecordMessageSubscribe);
        if (responseOk.getCode() == 200) {
            MqttMessageInfo mqttMessageInfo = responseOk.getBody();
        }
    }
返回参数类型说明
codeInteger200:查询成功;400:查询失败
msgStringsuccess:查询成功;fail:查询失败
bodyObject ts:消息投递时间;
cid:接收客户端ID;
status:状态;
topic:消息投递主题;
qos:消息qos等级

服务器SDK下载