SpringBoot 使用 EMQX

news2025/1/10 23:58:46

一、SpringBoot服务器端

1. 在centos搭建 EMQX服务

2. 创建API密码

3. 在SpringBoot 的yml中添加mqqt的配置

#配置
emqx:
  ip: 47.109.49.176
  port: 18083
  api: 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 {
    @Autowired
    private EmqConfig emqConfig;             //EMOX的实体类,可以直接获取配置文件的属性值
    private final String apiVer = "/api/v5"; //使用http实现推送api的版本


    //基础请求地址 http://172.0.0.1:8080/api/v5
    private 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));
    }
}

 二、前端uniapp 后面补

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/949349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT4不限使用、内容加密更安全,ChatGPT企业版能否成为公司必备工具?

近日,OpenAI推出了ChatGPT企业版,这款AI助手为企业提供了更快速度的不限次数使用的GPT4。它还包括可以扩展上下文窗口以处理更长文本、加密、企业级安全与隐私保护,以及账户组管理功能。 在ChatGPT成功推出9个月后,这款流行的聊…

x86 汇编手册快速入门

本文翻译自:Guide to x86 Assembly 在阅读 Linux 源码之前,我们需要有一些 x86 汇编知识。本指南描述了 32 位 x86 汇编语言编程的基础知识,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令、逻…

42、Flink 的table api与sql之Hive Catalog

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

匠心新品:大彩科技超薄7寸WIFI线控器发布,热泵、温控器、智能家电首选!

一、产品介绍 此次发布一款7寸高清全新外壳产品,让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动: 1 表面玻璃盖板使用2.5D立体结构; 2 液晶盖板采用一体黑设计,且液晶屏与触摸板是全贴合结构; …

leetcode 84. 柱状图中最大的矩形

2023.8.30 本题和接雨水 有点类似&#xff0c;依旧用双指针来解。但是本题要记录的是当前柱子 左右两侧第一个小于该柱子的索引。将其保存在两个数组中&#xff0c;最后再求最大面积。代码如下&#xff1a; class Solution { public:int largestRectangleArea(vector<int&g…

图表背后的故事:数据可视化的威力与影响

数据可视化现在在市场上重不重要&#xff1f;这已经不再是一个简单的问题&#xff0c;而是一个不可忽视的现实。随着信息时代的来临&#xff0c;数据已经成为企业和组织的核心资产&#xff0c;而数据可视化则成为释放数据价值的重要工具。 在当今竞争激烈的商业环境中&#xf…

css换行

强制显示一行&#xff0c;超出... .box{white-space: nowrap; /* 强制显示一行 */overflow: hidden;text-overflow: ellipsis; /* 超出... */ } 自动换行 一般默认制动换行 .box1{word-wrap:break-word; } 显示2行&#xff0c;超出... .box2 {overflow: hidden;display: -…

SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)

服务端在定位错误的时候&#xff0c;有时候要还原现场&#xff0c;这就要把当时的所有入参参数都能记录下来&#xff0c;GET还好说&#xff0c;基本NGINX都会记录。但是POST的请求参数基本不会被记录&#xff0c;这就需要我们通过一些小技巧来记录这些参数&#xff0c;放入日志…

Mybatis1.5 单个条件(动态SQL)

1.5 单个条件&#xff08;动态SQL&#xff09; 1.5.1 编写接口方法1.5.2 编写SQL语句1.5.3 编写测试方法 如上图所示&#xff0c;在查询时只能选择 品牌名称、当前状态、企业名称 这三个条件中的一个&#xff0c;但是用户到底选择哪儿一个&#xff0c;我们并不能确定。这种就属…

【小吉测评】哔哩哔哩接入AI?!效果如何?

文章目录 &#x1f384;前言⭐申请方式&#x1f3f3;️‍&#x1f308;注意 &#x1f6f8;简介&#x1f354;上手体验&#x1f6f8;进行数学计算&#x1f970;可以写代码吗 &#x1f384;前言 最近人工智能特别火&#xff0c;chatgpt&#xff0c;Claude2&#xff0c;文心一言等…

怎么把图片放大并且清晰?有详细的方法步骤

怎么把图片放大并且清晰&#xff1f;数字图像处理中的图片放大是许多行业和领域中广泛应用的一项技术。常规的放大方法通过插值或复制像素的方式增加像素数&#xff0c;但这会导致失真和模糊。无损放大是一种特殊的放大方法&#xff0c;它可以通过数学算法来增加图片的尺寸&…

从Gamma空间改为Linear空间会导致性能下降吗

1&#xff09;从Gamma空间改为Linear空间会导致性能下降吗 2&#xff09;如何处理没有使用Unity Ads却收到了GooglePlay平台的警告 3&#xff09;C#端如何处理xLua在执行DoString时候死循环 4&#xff09;Texture2DArray相关 这是第350篇UWA技术知识分享的推送&#xff0c;精选…

Transformer升级之路:逆用Leaky ReRoPE

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 在《Transformer升级之路&#xff1a;无限外推的ReRoPE&#xff1f;》中&#xff0c;笔者提出了 ReRoPE 和 Leaky ReRoPE&#xff0c;诸多实验结果表明&#xff0c;它们能够在几乎不损失训练效…

【设计模式】装饰者模式

目录 一、定义二、结构三、优点四、使用场景五、代码示例六、截图示例 一、定义 1.在不改变现有对象结构的情况下&#xff0c;动态给该对象添加额外功能的模式 2.类B继承于类A&#xff0c;并将类A作为B类的属性&#xff08;B类聚合A类&#xff09; 3.BufferedInputStream、Buff…

单元测试用例mock的使用方法

单元测试用例mock的使用方法 提升代码测试覆盖率的关键策略 为什么单元测试是如此重要&#xff1f; 在软件开发中&#xff0c;单元测试是一个关键的环节&#xff0c;可以确保代码的质量和稳定性。而在进行单元测试时&#xff0c;使用mock对象可以帮助我们更好地测试代码逻辑…

MySQL8.Xx安装控制台未生成随机密码解决方案

MySQL8.xx一主两从复制安装与配置 MySQL8.XX随未生成随机密码解决方案 MySQL8.0.30一主两从复制与配置(一) 一: Mysql 安装时控制台未生成密码 安装过程中解压或者安装时报错等,这种情况一般是因网络等其他原因导致下载的安装包不完整&#xff0c; 重新下载安装即可; 二:…

域名解析与http服务器实现原理

域名解析函数gethostbyname struct hostent *gethostbyname(const char *name); 主机结构在<netdb.h>中定义如下&#xff1a; 结构的成员包括&#xff1a; h_name&#xff1a;主机的正式名称 h_aliases&#xff1a;主机的备用名称数组&#xff0c;以NULL结尾指针 h_…

企业为什么要做自动化测试?我们该如何学习自动化测试?

作为一名大厂测试开发&#xff0c;编写自动化脚本&#xff0c;俨然成为一种必备的技能。 为什么要做自动化测试&#xff1f; 那企业或者是我们测试人员为什么要做自动化测试呢&#xff1f; 如果在前两年&#xff0c;可能10个测试员有6个都是做的功能测试&#xff0c;但随着测…

ToBeWritten之防御规避战术

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

day-05 TCP半关闭 ----- DNS ----- 套接字的选项

一、优雅的断开套接字连接 之前套接字的断开都是单方面的。 &#xff08;一&#xff09;基于TCP的半关闭 Linux的close函数和windows的closesocket函数意味着完全断开连接。完全断开不仅不能发送数据&#xff0c;从而也不能接收数据。在某些情况下&#xff0c;通信双方的某一方…