package com.zy.bms.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; import java.util.*; /** * RabbitMQ HTTP API接口请求 * * @author yang xiao kun * create on 2021/5/14 */ @Slf4j public class RabbitMQApi { private final static String authorization = "Basic bHEyMDE5OkxpUXVhblJhYmJpdA=="; /** * 向 MQTT 服务器申请用户,供设备进行登录 *
* 因为存在先后问题,需要先注册用户,在开通虚拟机权限,
* 所以逻辑为
* 发送注册用户请求
* 尝试申请权限
* 如果失败,则间隔一秒再次请求
* 如果申请次数超过3次,则尝试重新注册
* 重新注册后再次尝试申请
* 如果申请五次都失败,则结束方法,记录日志
*
* @param username 设备登录ID
* @param password 设备登录密码
*/
public static void register(String username, String password) {
addRabbitMqUser(username, password);
int count = 0;
while (!setPermission(username)) {
try {
Thread.sleep(1000);
if (count == 2) {
addRabbitMqUser(username, password);
}
if (count > 4) {
break;
}
count++;
} catch (InterruptedException e) {
log.error("向 MQTT 服务器申请用户失败", e);
break;
}
}
}
/**
* 注册 RabbitMQ 用户
*
* @param username 用户名
* @param password 用户密码
*/
private static void addRabbitMqUser(String username, String password) {
String url = "http://view.ailishi.org:15672/api/users/" + username;
//请求头
HttpHeaders headers = new HttpHeaders();
headers.add("authorization", authorization);
//请求参数
Map