首页 > 其他分享 >MQTT连接远程MQTT服务器

MQTT连接远程MQTT服务器

时间:2023-12-28 10:56:09浏览次数:34  
标签:String public MQTT client new 服务器 connOpts 远程

MQTT连接远程MQTT服务器

本篇文章以Spring Boot项目为主进行介绍连接步骤。

1、首先需要给定远程MQTT服务器的地址

Broker Addr:远程地址(域名):1883

1883端口号在TCP/IP协议中被用于MQTT通信。

既然用到MQTT,我们一般都是用来将设备的数据进行上传到云平台进行展示的。因此我们还需要设备号clientId,用户名,密码,用户名一般要求和设备号保持一致,为了方便,不过也是要按服务端的规则来。而且密码的规则则也是需要根据MQTT服务器的要求来进行加密等等。

总的来说,连接MQTT服务器我们需要连接地址,设备号,设备用户名,设备密码。

2、创建Spring Boot项目

1)导入依赖

<dependency>
    <groupId>org.eclipse.paho</groupId>
    <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
    <version>1.2.5</version>
</dependency>

我们采用eclipse.paho包里的mqttv3进行连接。

2)注入地址、设备号、用户名、密码

public class MqttService {

    @Value("${spring.mqtt.url}")
    private String mqttUrl;

    @Value("${spring.mqtt.username}")
    private String mqttUsername;

    @Value("${spring.mqtt.password}")
    private String mqttPassword;


    @Value("${spring.mqtt.clientid}")
    private String clientId;

    private MqttClient client;

    

3)连接并进行发布

继续在MqttService里写,上述的私有client,是为了解决发布和订阅不是同一个客户端的问题,要不然发送出去数据,是无法同时订阅到其他的主题的。

public void connectAndSendMessage(String topic, String message) {
        try {

            MqttClientPersistence persistence = new MemoryPersistence();

            if (client == null  || !client.isConnected()){
                client = new MqttClient(mqttUrl, clientId, persistence);

                MqttConnectOptions connOpts = new MqttConnectOptions();
                connOpts.setCleanSession(true);
                connOpts.setUserName(mqttUsername);
                connOpts.setPassword(mqttPassword.toCharArray());

                client.connect(connOpts);
            }
            client.publish(topic, message.getBytes(), 0, false);
            System.out.println("是否连接"+client.isConnected());

        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

4)订阅主题

public void subscribeToTopic(String topic) {
        try {
            MqttClientPersistence persistence = new MemoryPersistence();
            if (client == null  || !client.isConnected()){
                client = new MqttClient(mqttUrl, clientId, persistence);

                MqttConnectOptions connOpts = new MqttConnectOptions();
                connOpts.setCleanSession(true);
                connOpts.setUserName(mqttUsername);
                connOpts.setPassword(mqttPassword.toCharArray());

                client.connect(connOpts);
            }
            client.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable cause) {}

                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    // 处理接收到的消息
                    String receivedMessage = new String(message.getPayload());
                    System.out.println("接收到消息:" + receivedMessage);
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {}
            });

            client.subscribe(topic);

        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

client == null || !client.isConnected()这一步是为了判断client是否已经创建,如果已经存在就需要在重新创建新的客户端

标签:String,public,MQTT,client,new,服务器,connOpts,远程
From: https://www.cnblogs.com/jundong2177/p/17932241.html

相关文章

  • 服务器断掉,开机右下角只显示光标
    搬移服务器前直接断电,没有按照标准的方式的执行关机指令进行关机,导致服务器启动不了,在右下角只有一个光标闪烁。参阅了资料,找到解决办法。1、制作一个U盘启动。2、开机选择修复功能。执行chroot/mnt/sysimage命令3、执行:grub-install/dev/sdaNotice:cat/boot/grub/device.ma......
  • HTTP代理服务器:Go语言下的“网络翻译官”
    开场白:在这个全球化的网络时代,有时我们需要一个“翻译官”来帮助不同系统、不同语言进行交流。今天,我们就来探讨如何使用Go语言,轻松实现这样一个角色——HTTP代理服务器,让我们的网络请求更加畅通无阻!知识点一:什么是HTTP代理服务器?想象一下,你是一名只会说中文的游客,身处一个只会说英......
  • 用IIS搭建FTP服务器
    注意:经实测,IIS会限制传输速度,已经不推荐使用IIS来搭建,推荐使用FTP点击跳转:用FileZilla搭建FTP服务器目的通过FTP,让电脑和手机之间能够无线传输数据开启IIS功能快捷键win+s搜索控制面板打开点击程序,点击启用或关闭windows功能找到InternetInformationServices,勾选FTP服......
  • DHCP服务器的配置
    DHCP的配置过程服务器:WindowServer2016、客户端:Windows101、添加一块儿新网卡,让服务器和客户端保持同一网卡,并把客户机网卡设置为自动获取ip      ......
  • 将本地服务共享给服务器方法之一(SSH -R)
    文档说明:只记录关键地方;发布时间:2023-12-27需求:通过公网临时访问本地正在开发的服务运行环境:linuxmacos状态:实验完善中用途例子:1、本地调试微信公众号服务器推送的消息2、公网临时预览,预览本地开发的服务3、服务器访问本地NAS服务4、远程协助等等5、服......
  • 如何将闲置的电脑搭建成服务器
    1、安装系统作为服务器最好使用Linux系统,Ubuntu、deepin等都可以。2、安装宝塔面板宝塔面板是一个很好的服务器管理面板,可以在网页上连接管理服务器。首先在宝塔网站注册账号,然后到下载安装页面,根据自己安装的操作系统来选择安装脚本安装完成如图,生成两个面板地址,可以在外......
  • 迅为RK3588开发板RTMP推流之视频监控之搭建 RTMP 媒流体服务器
    1.安装nginx+rtmp运行所要用到的库和依赖环境apt-getupdateapt-getinstallbuild-essentiallibpcre3libpcre3-devlibssl-devzlib1g-devopenssl2.下载nginx-1.20.2源码(下载地址:http://nginx.org/download/nginx-1.20.2.tar.gz)和nginx-rtmp-module(下载地址:hy......
  • 死锁、内部碎片、外部碎片、多进程/多线程、服务器高并发、集群
    死锁:两个(多个)线程互相等待对方数据的过程1.死锁产生条件(解决办法):......
  • 解决Python项目部署到服务器上的编码问题
    在将Python项目部署到服务器上时,经常会遇到编码问题,例如中文乱码、字符集不匹配等。这些问题可能导致项目无法正常运行或显示正确的内容。本文将介绍如何解决Python项目部署到服务器上的编码问题,以确保项目能够在服务器上正常运行。步骤一:确认编码问题首先,我们需要确认是否存在编码......
  • 06-服务器端命令(SQL)
    SQL定义:结构化的查询语言,mysql接口程序只负责接收SQL,传送给SQL层SQL种类DDL:数据库(对象)定义语言DCL:数据库控制语言(grantrevoke)DML:数据(行)操作语言(updatedeleteinsert)DQL:数据查询语言(show、select)一、DDL:数据库(对象)定义语言:DDL对库的操作createdatabaselufei;......