public class Server {
public static final String HOST ="tcp://140.143.23.199:1883";//"tcp://192.168.1.3:61613";//mqtt安装的服务器broker地址
public static final String TOPIC = "v1/devices/me/telemetry";//toclient/124";//定义一个主题
private String clientid = "2c6bd53b-d7c1-4b56-a";//定义mqtt的id,可以在mqtt服务配置中指定,和clientId无关
private MqttClient client;
private MqttTopic topic;
//private MqttTopic topic125;
private String userName = "2c6bd53b-d7c1-4b56-a";//要变的
//private String passWord = "password";
private MqttMessage message;
/**
* 设置登录用户名,默认6502
* @param deviceId
* @return
*/
public void setUserName(String deviceId) {
this.userName = deviceId;
}
/**
* 设置clientId
* @param clientId
* @return
*/
public void setClientId(String clientId) {
this.clientid = clientId;
}
/**
* 构造函数
* @throws MqttException
*/
public Server() throws MqttException {
// MemoryPersistence设置clientid的保存形式,默认为以内存保存
client = new MqttClient(HOST, clientid, new MemoryPersistence());
connect();
}
/**
* 连接服务器broker
*/
private void connect() {
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false);
options.setUserName(userName);
//options.setPassword(passWord.toCharArray());
// 设置超时时间
options.setConnectionTimeout(10);
// 设置会话心跳时间
options.setKeepAliveInterval(20);
try {
client.setCallback(new PushCallback());
client.connect(options);
topic = client.getTopic(TOPIC);
//topic125 = client.getTopic(TOPIC125);
} catch (Exception e) {
e.printStackTrace();
}
}
/***
*
* @param topic
* @param message
* @throws MqttPersistenceException
* @throws MqttException
*/
public void publish(MqttTopic topic , MqttMessage message) throws MqttPersistenceException,
MqttException {
MqttDeliveryToken token = topic.publish(message);
token.waitForCompletion();
System.out.println("message is published completely! "
+ token.isComplete());
}
/***
* 启动入口
* @param args
* @throws MqttException
*/
public static void main(String[] args) throws MqttException {
Server server = new Server();
server.message = new MqttMessage();
server.message.setQos(2);
server.message.setRetained(true);
String telemetry = "{\"0200\":\"90\"}";
//server.message.setPayload("给客户端124推送的信息".getBytes());
server.message.setPayload(telemetry.getBytes());
server.publish(server.topic , server.message);
System.out.println(server.message.isRetained() + "------ratained状态");
}
/**
* 转发设备数据变化
* @param telemetry
* @throws MqttException
*/
public void pushData(String telemetry) throws MqttException {
message = new MqttMessage();
message.setQos(2);
message.setRetained(true);
message.setPayload(telemetry.getBytes());
publish(topic , message);
System.out.println(message.isRetained() + "------ratained状态");
}
}
拥有static静态变量HOST和TOPIC,即服务器broker主机和往哪个主题推送。一直存在的两个变量,还有一个构造函数Server(),也是诞生时就存在的,构造函数的方法包括两个函数:
new MqttClient(HOST, clientid, new MemoryPersistence());
connect();
要用到HOST和TOPIC变量,connect()函数设置连接的选项,还有回调函数。由于构造函数中要调用TOPIC和HOST,所以host和topic和clientId也得是静态,并且初始有固定值。
我需要变topic和clientID,传入的参数有topic,deviceId,telemetry
https://blog.csdn.net/qq_24334367/article/details/52277536
出错原因:订阅和推送主题不能是同一个,设备返回的推送应该把request替换成response。
问题:LIghtIot平台发送post request到thingsboard服务器,得不到response,所以超时???但是事实上其实已经发送到服务器端了,但是服务器端没有给response。