返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >java实现mqtt协议
  • 185
分享到

java实现mqtt协议

java 2023-09-04 07:09:07 185人浏览 安东尼
摘要

1.简介 MQTT(message queuing telemetry transport)是IBM开发的即时通讯协议,是一种发布/订阅极其轻量级的消息传输协议,专门为网络受限设备、低宽带以及高延迟和

1.简介

MQTT(message queuing telemetry transport)是IBM开发的即时通讯协议,是一种发布/订阅极其轻量级的消息传输协议,专门为网络受限设备、低宽带以及高延迟和不可靠的网络而设计的。由于以上轻量级的特点,是实现智能家居的首选传输协议,相比于XMPP,更加轻量级而且占用宽带低。

2.特点

a.由于采用发布/订阅的消息模式,可以提供一对多的消息发布
b.轻量级,网络开销小
c.对负载内容会有屏蔽的消息传输
d.有三种消息发布质量(Qos):
qos=0:“至多一次”,这一级别会发生消息丢失或重复,消息发布依赖于tcp/IP网络
qos=1:“至少一次”,确保消息到达,但消息重复可能会发生
qos=2:“只有一次”,确保消息到达一次
在这里插入图片描述

3.服务端下载地址

下载页面:https://mosquitto.org/download/

4.客户端下载地址

下载页面:https://mqttx.app/zh

5.实现代码

1、导入依赖

<dependency>            <groupId>org.eclipse.paho</groupId>            <artifactId>org.eclipse.paho.client.mQttv3</artifactId>            <version>1.2.5</version>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>        </dependency>

2、配置mqtt信息

server:  port: 6001 #项目端口mqtt:  url: "tcp://localhost:1883" #mqtt地址:端口  username: "username" #mqtt账号  passWord: "password" #mqtt密码

3、创建实体类接收mqtt信息

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Data@Component@ConfigurationProperties(value = "mqtt")public final class MqttConfig {    private   String url;    private  String username;    private  String password;}

4、创建mqtt工具

package com.example.mqtt.util;import com.example.mqtt.listener.MqttListener;import lombok.extern.slf4j.Slf4j;import org.eclipse.paho.client.mqttv3.MqttClient;import org.eclipse.paho.client.mqttv3.MqttConnectOptions;import org.eclipse.paho.client.mqttv3.MqttException;import org.eclipse.paho.client.mqttv3.MqttMessage;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component@Slf4jpublic class MqttUtil {    @Autowired    MqttConfig mqttConfig;    private MqttClient client;    @PostConstruct//初始化注解    private MqttClient initPublish() {        if (client == null) {            try {                client = new MqttClient(mqttConfig.getUrl(), "mqtt_client", new MemoryPersistence());                // 连接参数                MqttConnectOptions options = new MqttConnectOptions();                // 设置用户名和密码                options.setUserName(mqttConfig.getUsername());                options.setPassword(mqttConfig.getPassword().toCharArray());                 // 设置超时时间 单位为秒                options.setConnectionTimeout(60);                 // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制                options.seTKEepAliveInterval(60);                // 连接                client.connect(options);            } catch (MqttException e) {                throw new RuntimeException(e);            }        }        return client;    }    public void publish(String topic, String content) {        try {            // 创建消息并设置 QoS            //qos: 0 最多一次, 1至少一次,   2仅一次            MqttMessage message = new MqttMessage(content.getBytes());            message.setQos(0);            // 发布消息            client.publish(topic, message);            log.info("topic:{}", topic);            log.info("发送消息:{}", content);        } catch (Exception e) {            e.printStackTrace();        }    }    public void subscribe() {        //topic 接收多个可用#代替        // 接收消息        try {            client.subscribe("mqtt/#", 0, new MqttListener());        } catch (MqttException e) {            throw new RuntimeException(e);        }    }}

5创建接收信息实现类

import com.example.mqtt.factory.MqttFactory;import com.example.mqtt.service.MqttService;import lombok.extern.slf4j.Slf4j;import org.eclipse.paho.client.mqttv3.IMqttMessageListener;import org.eclipse.paho.client.mqttv3.MqttMessage;@Slf4jpublic class MqttListener implements IMqttMessageListener {    @Override    public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {        MqttService mqttService = MqttFactory.getMqttFactory(topic);        if (mqttService != null){            mqttService.analysisMessage(new String(mqttMessage.getPayload()));        }else{            log.error("接收topic异常:{}",topic);        }        log.info("接收topic:{}",topic);        log.info("接收信息:{}",new String(mqttMessage.getPayload()));    }}

6、创建抽象工厂
注:个人采用工厂设计模式,如不采用可直接在5.4里的subscribe方法实现,
如:

public void subscribe() {                try {        //"mqtt/test"表示只接收这个通道,其余的不接收,个人不建议,要考虑后续扩展            client.subscribe("mqtt/test", 0, new IMqttMessageListener() {                @Override                public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {        }            });        } catch (MqttException e) {            throw new RuntimeException(e);        }    }

创建工厂

import com.example.mqtt.service.MqttService;import com.example.mqtt.service.impl.HelloMqttServiceImpl;import com.example.mqtt.service.impl.TestMqttServiceImpl;public class MqttFactory {    public static MqttService getMqttFactory(String topic){        switch (topic){            case "mqtt/test":               return new TestMqttServiceImpl();            case "mqtt/hello":                return new HelloMqttServiceImpl();            default :                return null;        }    }}

7创建具体业务实现信息
controller层

import com.example.mqtt.util.MqttUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.WEB.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class MqttClientController {    @Autowired    private MqttUtil mqttUtil;        @GetMapping("/pushMqtt")    public String pushMqtt(@RequestParam("message")String message){        mqttUtil.publish("mqtt/test",message);    return "发送成功";    }    @GetMapping("/subscribe")    public String subscribe(){        mqttUtil.subscribe();        return "接收成功";    }}

service层

public interface MqttService {    void analysisMessage(String message);}

serviiceImpl层

import com.example.mqtt.service.MqttService;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;@Slf4j@Servicepublic class HelloMqttServiceImpl implements MqttService {    @Override    public void analysisMessage(String message) {        log.info("处理topic/hello信息:{}",message);    }}
import com.example.mqtt.service.MqttService;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;@Slf4j@Servicepublic class TestMqttServiceImpl implements MqttService {    @Override    public void analysisMessage(String message) {        log.info("处理mqtt/test信息:{}",message);    }}

来源地址:https://blog.csdn.net/weixin_44905972/article/details/131665070

--结束END--

本文标题: java实现mqtt协议

本文链接: https://www.lsjlt.com/news/393091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java实现mqtt协议
    1.简介 MQTT(message queuing telemetry transport)是IBM开发的即时通讯协议,是一种发布/订阅极其轻量级的消息传输协议,专门为网络受限设备、低宽带以及高延迟和...
    99+
    2023-09-04
    java
  • go语言实现mqtt协议的实践
    目录一、什么是MQTT二、Go语言MQTT服务器Broker的搭建三、Go客户端访问简单API一、什么是MQTT MQTT(Message Queuing Telemetry Tra...
    99+
    2024-04-02
  • Mqtt通信协议详解
    文章目录 1. 简介mqtt2.mqtt协议实现3.Mqtt数据包4. QoS等级5. mqtt传输安全保证5.1 应用层5.2 传输层5.2.1 TLS安全协议 5.3 网络层 ...
    99+
    2023-09-03
    服务器 网络
  • mqtt协议和tcp协议的区别有哪些
    小编给大家分享一下mqtt协议和tcp协议的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!区别:1、MQTT诞生于1999年互联网初期,TCP协议诞生于...
    99+
    2023-06-15
  • MQTT协议(新版)接入OneNET平台
    工具准备 MQTT.fx (用于模拟设备接入)token (计算密钥工具) 添加产品 首先我们先进入到中移物联官方网站:https://open.iot.10086.cn/ 点击左上角产品服务→基础服...
    99+
    2023-09-28
    服务器
  • 使用 Java 类 实现Http协议
    目录Java实现Http协议一、协议请求的定义二、响应协议的定义三、编码常量定义四、客户端的实现五、服务端的实现六、ProtocolUtils工具类的实现七、ByteUtils类的实...
    99+
    2024-04-02
  • opc协议golang实现
    随着工业自动化的不断发展,OPC协议越来越成为工业领域中数据通讯的主流协议。而Golang作为一种高性能、可靠性强的编程语言,也越来越受到工业自动化领域的关注。本文将介绍如何使用Golang语言实现OPC协议的数据通讯,以帮助读者更好地理解...
    99+
    2023-05-14
  • golang实现ptp协议
    PTP(Precision Time Protocol)是一种时间同步协议,它能够在分布式系统中实现子微秒级别的时间同步。在工业自动化、网络通讯等领域,时间同步是非常重要的。PTP协议的实现一直是个热门的话题,而Golang是一种高效的编程...
    99+
    2023-05-15
  • golang 实现redis协议
    随着互联网的快速发展,现代应用程序对高效、可伸缩的数据存储的需求越来越大。Redis,一个开源的键值对数据库,经常被用作软件架构中的缓存、消息队列、分布式锁等多种用途。Redis文档中有介绍它的通信协议,而这种协议也赋予了开发一种实现Red...
    99+
    2023-05-15
  • python实现onvif协议-2
    from suds.client import Client from suds.wsse import Security from suds_pa...
    99+
    2023-01-31
    协议 python onvif
  • Java FTP协议实现文件下载功能
    目录一、FTP协议二、文件上传1.连接服务器2.登录操作3.上传操作三、文件下载1.连接服务器2.登录操作3.下载操作四、总结一、FTP协议 ftp是(FileTransferPro...
    99+
    2022-11-13
    Java文件下载 Java FTP 文件下载 Java FTP协议
  • 在Node.js下如何运用MQTT协议实现即时通讯及离线推送
    小编给大家分享一下在Node.js下如何运用MQTT协议实现即时通讯及离线推送,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码...
    99+
    2024-04-02
  • MQTT协议史上最全解析(纯干货分享)
    目录 MQTT是什么?一些术语解释MQTT特点MQTT控制报文格式十四种控制报文1号控制报文:CONNECT – 连接到服务端2号控制报文:CONNACK – 确认连接请求3号控制报文:PUB...
    99+
    2023-09-13
    网络 服务器 MQTT 嵌入式
  • Android如何开发MQTT协议的模型及通信
    本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何开发MQTT协议的模型及通信”吧!什么是MQTT协议MQTT协议又...
    99+
    2023-07-05
  • Android开发MQTT协议的模型及通信浅析
    目录前言什么是MQTT协议MQTT协议的模型开发MQTT通信1. 处理客户端和服务端(1)服务端开发(2)客户端开发2. 客户端开发Paho的mqtt的BUG总结前言 为什么要讲M...
    99+
    2023-03-01
    Android MQTT协议模型通信 Android MQTT
  • esp8266模块--MQTT协议连接服务器实现数据接收和发送+源码
    首先推荐中国移动的代码,我觉得中国移动的代码更为合理:(但是有一些其他的模块在里面) OneNET开发板代码、资料--2020-09-27--标准板、Mini板bug修复 - 开发板专区 - OneNET设备云论坛 (10086.cn) 以...
    99+
    2023-09-20
    笔记 嵌入式硬件 stm32
  • Java的http协议实例分析
    本篇内容主要讲解“Java的http协议实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的http协议实例分析”吧!http协议的组成 http...
    99+
    2024-04-02
  • Java应用层协议WebSocket实现消息推送
    目录前言浏览器端服务器端前言   大部分的web开发者,开发的业务都是基于Http协议的:前端请求后端接口,携带参数,后端执行业务代码,再返回结果给前端。作者参与...
    99+
    2023-02-22
    Java WebSocket Java WebSocket消息推送
  • 基于node实现websocket协议
    一、协议 WebSocket是一种基于TCP之上的客户端与服务器全双工通讯的协议,它在HTML5中被定义,也是新一代webapp的基础规范之一。 它突破了早先的AJAX的限制,关键在于实时性,服务器可以主动...
    99+
    2022-06-04
    协议 node websocket
  • Redis RESP协议如何实现
    本文小编为大家详细介绍“Redis RESP协议如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis RESP协议如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作