一、SpringBoot服务器端
1. 在centos搭建 EMQX服务
2. 创建API密码
3. 在SpringBoot 的yml中添加mqqt的配置
#配置
emqx:ip: 47.109.49.176port: 18083api: xxxxxxxx (自己的api)secret: xxxxxxxxx (自己的secret)
4. 因为服务端在推送消息给 EMQX时,需要对应的api标识和secret权限, 就先定义一个类,通过ConfigurationProperties注解获取配置文件中的属性。
@Data
@Component
@ConfigurationProperties("emqx")
public class EmqConfig {private String ip;private int port;private String api;private String secret;
}
5. EMQX工具类
@Component
public class EmqApi {@Autowiredprivate EmqConfig emqConfig; //EMOX的实体类,可以直接获取配置文件的属性值private final String apiVer = "/api/v5"; //使用http实现推送api的版本//基础请求地址 http://172.0.0.1:8080/api/v5private String getBaeUrl() {return "http://" + emqConfig.getIp() + ":" + emqConfig.getPort() + apiVer;}/*服务端发起请求:(1)拼接完成的路径: http://172.0.0.1:8080/api/v5/public (public表示推送一条消息)(2)设置请求方式:get、post、delete、put(3)设置权限:用户名、密码* */private HttpRequest getRequest(String url) {HttpRequest request = HttpRequest.of(getBaeUrl() + url);request.setMethod(Method.POST);request.basicAuth(emqConfig.getApi(), emqConfig.getSecret());return request;}/*将请求和封装放在一起(已经重载,可以传字符串,也可以传对象)* */private HttpResponse getResponse(String url, String body) {return getRequest(url).body(body).execute();}private HttpResponse getResponse(String url, Dict dict) {return getResponse(url, JSONUtil.toJsonStr(dict));}/*发送消息的方法 */public String publish(String topic, String payload) {Dict dict = Dict.create();dict.set("topic", topic); //订阅频道标识dict.set("payload", payload); //消息内容dict.set("qos", 2); //消息仅传送一次。不会重复、不会丢失HttpResponse response = getResponse("/publish", dict);return response.body();}/*发送消息的方法 */public String publish(String topic, Map map) {return publish(topic, JSONUtil.toJsonStr(map));}
}